Ariel98 Postado Setembro 28, 2016 Denunciar Share Postado Setembro 28, 2016 Eu tenho que criar um programa que resolva esse problema: "Faça uma função que receba um vetor X de 30 elementos inteiros, por parâmetro, e retorne dois vetores A e B. O vetor A deve conter os elementos pares e o vetor B, os elementos ímpares." Meu código: #include <stdio.h> #define TAM 6 void geraVetor(int[], int[], int[], int*, int*); /*Recebe X, A e B*/ int main() { int X[TAM], A[30], B[30], i, tamA=0, tamB=0; //Lendo o vetor X. for(i=0; i<TAM; i++){ printf("Entre com o valor %d: ", i+1); scanf("%d", &X[i]); } geraVetor(X, A, B, &tamA, &tamB); printf("Vetor X:\n\n"); for(i=0; i<TAM; i++) printf("%d\n", X[i]); printf("\nVetor A:\n\n"); for(i=0; i<tamA; i++) printf("%d\n", A[i]); printf("\nVetor B:\n\n"); for(i=0; i<tamB; i++) printf("%d\n", B[i]); return 0; } void geraVetor(int X[], int A[], int B[], int *tamA, int *tamB){ int i; for(i=0; i<TAM; i++){ if(X[i]%2 == 0){ A[*tamA] = X[i]; *tamA++; } else{ B[*tamB] = X[i]; *tamB++; } } } Quando eu vou imprimir os arrays A e B o programa só deixa um espaço vazio. OBS: Ele imprime os valores de X. Se alguém conseguir achar os meus erros, eu agradeço muito! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RogersM Postado Setembro 29, 2016 Denunciar Share Postado Setembro 29, 2016 Pelo que entendi o problema está nas linhas: *tamA++; e *tamB++; Ao invés de incrementar o conteúdo da variável passada por parâmetro, deve estar incrementando a posição do ponteiro. Fiz um teste, declarei uma variável inteira e fiz o incremento nela e depois retornei seu valor para o conteúdo de memória apontado pelo ponteiro. Como não conheço quase nada da linguagem, acho talvez deva existir uma maneira mais simples e elegante de se fazer isso. Segue abaixo o trecho que modifiquei referente ao tamA: itemp = *tamA; itemp++; *tamA=itemp; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RogersM Postado Setembro 29, 2016 Denunciar Share Postado Setembro 29, 2016 Descobri uma forma mais limpa para resolver, basta por entre parenteses, desta forma ele incrementa o conteúdo do apontamento: (*tamA)++; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ariel98 Postado Setembro 29, 2016 Autor Denunciar Share Postado Setembro 29, 2016 3 horas atrás, RogersM disse: Descobri uma forma mais limpa para resolver, basta por entre parenteses, desta forma ele incrementa o conteúdo do apontamento: (*tamA)++; O problema era exatamente esse! Eu me esqueci desse detalhe do parênteses... Muito obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ariel98
Eu tenho que criar um programa que resolva esse problema:
"Faça uma função que receba um vetor X de 30 elementos inteiros, por parâmetro, e
retorne dois vetores A e B. O vetor A deve conter os elementos pares e o vetor B, os
elementos ímpares."
Meu código:
Quando eu vou imprimir os arrays A e B o programa só deixa um espaço vazio.
OBS: Ele imprime os valores de X.
Se alguém conseguir achar os meus erros, eu agradeço muito!
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.