Ir ao conteúdo

Posts recomendados

Postado

Oi, gente.To precisando de ajuda com esse programa em c que tá dando erros.Me ajudem o mais rápido possível.Obrigada.

-Enunciado:

Leia um vetor de 12 posições e em seguida ler, tambem 2 valores x e y quaisquer, correspondentes a duas posições no vetor.Ao final, seu programa deverá escrever a soma dos valores encontrados nas respctivas posições x e y.

-Ling. C:(Onde deu erro?)

#include<stdio.h>
#include<conio.h>
main()
{
clrscr();
int vet[12],x,y,i,soma;
for(i=1;i<=12;i++)
{
scanf("%d",&vet[i]);
}
scanf("%d",&x);
scanf("%d",&y);
soma=vet[x]+vet[y];
printf("\n A soma é:%d",soma);
getche();
return(0);
}

PS: Por favor me ajudem!!!!!!!!!!

:lol:

  • Obrigado 1
Postado

Passando o olho achei dois erros, um de gramática e um de lógica:

1) getche(0);

2)

for(i=1;i<=12;i++)
{
scanf("%d",&vet[i]);
}

Em C a matriz começa em vet[0] e termina em vet[limite-1]. Então o laço tem que ser:


for(i=0;i<12;i++)
{
scanf("%d",&vet[i]);
}

Sempre use a tag CODE para colocar o código, senão fica difícil de entender.

  • Curtir 2
Postado

Oi 'Barutaji',

o erro 1 foi por falta de atenção e digitação mesmo.O erro 2 não foi um erro, pois podemos tanto colocar do seu modo como do meu.Logo, nenhum desses é realmente o problema do programa....Mas agradeço mesmo assim.

Se mais alguém puder me ajudar, ficarei muito agradecida.

  • Curtir 1
Postado

Obrigatoriamente terá de comçear em 0, caso contrario, voce inicializara pelo segundo elemento, e, caso selecione a ultima posição para somar, estara pegando lixo de memória.

  • Curtir 2
Postado

Cara,

já que tu começou do segundo elemento, poderia colocar o x no primeiro e o y no último elemento do vetor.

Ao meu ver, você tem que preencher o vetor e deixar 2 elementos em brancos e, depois, preenche-los com as variáveis x e y. (Se eu estiver errado, mal "/

No código ficaria mais ou menos assim:


#include<stdio.h>
#include<conio.h>


int main()
{
clrscr();
int vet[12],x,y,i,soma;
for(i=1;i<=11;i++)
{
scanf("%d",&vet[i]);
}

// --------

scanf("%d",&x);

vet[0] = x;

scanf("%d",&y);

vet[11] = y;

soma=vet[0]+vet[11];

printf("\n A soma \x86: %d",soma);
getch();
}

Se não for isso, avisa que daqui a pouco volto aqui no seu tópico.

[]' s

  • Curtir 1
Postado

Oi 'aqueleh4x0r', eu acho que não é bem isso.Na verdade os valores x e y podem ser qualquer numero entre 1 e 12, que "substituirá" o i na expressao:vet.

Na verdade, o programa rodou mas ele não faz a soma certa e nem pede os valores x e y.Obrigada mesmo assim.

;)

  • Curtir 1
Postado

Entendi,

tenta esse:


for(i = 0; i <= 12; i++)
{
if(x == vet[i])
{
vet[i] = x;
}

É mais ou menos assim, se algum elemento do vet for igual o valor de x, vai substituir, dai é só pegar a posição usando uma variável e somar.

Se não sabe como pegar a posição, é só criar um variável qualquer e, dentro do 'if', colocar a variável '= i' para pegar a posição.

  • Curtir 1
Postado

Você pode começar pelo segundo elemento, mas o final do laço tem que ser:

x<=11

ou

x<12

Senão você vai estar acessando uma região da memória que não pertence à matriz, logo é uma invasão de memória. Por isso que é um erro de lógica.

Se você quiser ter 12 números tem que criar uma matriz de 13 elementos(primeiro nulo), aí sim pode colocar x<=12.

Pelo que você indicou acerca do erro, tudo indica que o erro é esse: invasão de memória, um erro fatal.

  • Curtir 1
  • 9 anos depois...
Postado

Como tambem precisei respoder a um exercicio com a mesma proposta, acabei sendo ajudado por este post, agradeco a todos e estou compartilhando o resultado para que possa ajudar aos demais...

 

/*3) Faça um programa que leia um vetor de 8 posições e, em seguida, leia também dois
valores X e Y quaisquer correspondentes a duas posições no vetor. Ao final seu programa
deverá escrever a soma dos valores encontrados nas respectivas posições X e Y.*/

 

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{

    setlocale(LC_ALL, "Portuguese"); //usado apenas para imprimir caracteres especiais...


    int vet[8],x,y,i,soma;
    for(i=1;i<=8;i++)
{
        printf("Digite o %i vetor:",i);
            scanf("%d",&vet);
}
             x=vet[5]; //especificando qual posicao de vetor sera imprimida e somada com Y.
             y=vet[7]; //especificando qual posicao de vetor sera imprimida e somada com X.
        printf("O valor do vetor X e: %i\n",x);
        printf("O valor do vetor Y e: %i\n",y);
            soma=vet[5]+vet[7];

        printf("\n A soma de X e Y e: %i",soma);
return 0;
}

 

note que os valores de X e Y sao lidos sem precisar que o usuario digite, ele e proposto a uma ou mais casas dos vetores indicados no laco for, no caso indiquei as posições dos vetores 5 e 7 que sao somados com os numeros expecificados pelo usuarios.

 

  • Curtir 1
  • Obrigado 1
  • 1 ano depois...
Postado

@Madson Raposo cara, tem um erro no "vet", vet>vet[i]. muito obrigado, o resto ta ok

 

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{

    setlocale(LC_ALL, "Portuguese"); //usado apenas para imprimir caracteres especiais...


    int vet[8],x,y,i,soma;
    for(i=1;i<=8;i++)
{
        printf("Digite o %i vetor:",i);
            scanf("%d",&vet[i]); //vet>>vet[i], única mudança AQUI!!!!
}
             x=vet[5]; //especificando qual posicao de vetor sera imprimida e somada com Y.
             y=vet[7]; //especificando qual posicao de vetor sera imprimida e somada com X.
        printf("O valor do vetor X e: %i\n",x);
        printf("O valor do vetor Y e: %i\n",y);
            soma=vet[5]+vet[7];

        printf("\n A soma de X e Y e: %i",soma);
return 0;
}
 

  • Obrigado 2
  • 11 meses depois...
Postado

@Gfyy Tsukakushi

Utilizando essa mesma logica, Posso solicitar a posição de X e Y que o usuario quer somar e depois imprimir o resultado da soma?  Tentei dessa forma

 

#include <stdio.h>
#include <locale.h>

int main(){
    setlocale(LC_ALL,"Portuguese");
    int array[8], i,x,y,soma;
    soma = 0;

    for(i = 0; i < 8; i++){
        printf("Vetor[%d]: ", i);
        scanf("%d", &array[i]);
    }

    x = array[i];
    scanf("%d\n", array[i]);

    y = array[i];
    scanf("%d\n", array[i]);

    soma = x + y;

    printf("\nSoma de X + Y: %d", soma);

}

  • Curtir 1
Postado

@Andersonfxj

11 minutos atrás, Andersonfxj disse:

x = array[i];

Antes do controle ser transferido pra fora do loop, o índice i é incrementado mais uma vez, o que torna a condição do for falsa. Então i = 8.

O vetor não tem posição de índice 8, então não vai conseguir fazer essa atribuição, e nem precisa dela.

O mesmo vale pra isso:

11 minutos atrás, Andersonfxj disse:

y = array[i];

 

11 minutos atrás, Andersonfxj disse:

scanf("%d\n", array[i]);

Você tem que ler os valores de x e y, não de array[i]. E não se esqueça do &.

 

11 minutos atrás, Andersonfxj disse:

soma = x + y;

"seu programa deverá escrever a soma dos valores encontrados nas respectivas posições x e y"

x e y são índices, assim como i, então use eles pra indexar array. Dessa forma, vai conseguir os valores nas posições x e y.

  • Curtir 2
  • Obrigado 1
Postado
Em 21/09/2010 às 14:11, Ra.fashionet disse:

O erro 2 não foi um erro, pois podemos tanto colocar do seu modo como do meu.Logo, nenhum desses é realmente o problema do programa

 

é um problema sim, e está errado. O primeiro valor do vetor vai estar no endereço vet[0]. Assim é em C.

 

Não se trata do seu modo ou do modo de de alguém. 

 

O que é vet? vet é int[12] o que seu complilador pode te dizer. O compilador vai alocar espaço para 12 desses int e colocar o endereço em vet e você pode acessar cada um deles, de vet[0]a vet[11] como @Gfyy Tsukakushi te disse

 

Seu programa ainda não está bom e tem já muitos dos erros comuns que se vê aqui no forum.

 

Use o botão code como explicado no primeiro post. Veja a diferença:
 

#include <conio.h>
#include <stdio.h>
main()
{
    clrscr();
    int vet[12], x, y, i, soma;
    for (i = 1; i <= 12; i++) { scanf("%d", &vet[i]); }
    scanf("%d", &x);
    scanf("%d", &y);
    soma = vet[x] + vet[y];
    printf("\n A soma é:%d", soma);
    getche();
    return (0);
}

 

  • main retorna um int. É C. Seu compilador deve ter te avisado. Não ignore as mensagens. Se não as viu é porque não estão habilitadas e não deve nunca usar seu compilador assim. Use -Wall se usa gcc ou /W3 se usa o compilador da microsoft.
  • não use conio.h. Isso é dos anos 80 e não faz parte da linguagem. São mais de 40 anos já.
  • scanf() retorna um int. USE. é ingênuo seguir sem saber se leu algo.
  • no for nunca use uma variável externa se não precisa., Muito menos uma com o nome ingênuo de i. Isso sempre cai na sua cabeça. 
  • TESTE x e y para ver se estão dentro dos limites do vetor ao invés de ir somando cegamente.
  • pule de linha ao final da mensagem e não antes. O sistema já vai começar a saída numa linha nova, mas não vai pular na saída....
  • (0) é a mesma coisa que 0 
  • inicialize TODAS as variáveis.
  • delcare uma variável por linha. É grátis
Em 21/09/2010 às 14:35, Ra.fashionet disse:

Td bem.Mas eu realmente quero começar pelo segundo elemento.

Mas qual será o real problema do programa?

 

Declare vet como   int[13] e não terá problema 

 

Mostre os valores que leu antes de mostrar a soma. Vai ajudar você mesma a testar...

 

Mostre os valores que está somando

 

Antes de ler ajude o cara que vai digitar e escreva na tela o que espera que ele faça. E não seria mal ajudar na conta dos 12 elementos e dizer qual está lendo a cada vez...

 

 

#include <conio.h>
#include <stdio.h>
main()
{
    clrscr();
    int vet[12], x, y, i, soma;
    for (i = 1; i <= 12; i++) { scanf("%d", &vet[i]); }
    scanf("%d", &x);
    scanf("%d", &y);
    soma = vet[x] + vet[y];
    printf("\n A soma é:%d", soma);
    getche();
    return (0);
}

 

Use o botão code. E veja os detalhes de que falei no post #16.

  • Curtir 1
  • Obrigado 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!