Ir ao conteúdo
  • Cadastre-se

Estrut. de dados - Exercício


Ra.fashionet

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • 9 anos depois...

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
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

@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
Link para o comentário
Compartilhar em outros sites

  • 11 meses depois...

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!