Faça uma função que receba como parâmetro um vetor
de 30 elementos inteiros e retorne, também por parâmetro, dois vetores
e
. O vetor
deve conter os elementos pares de X e o vetor
, os elementos ímpares.
Passo 1
O enunciado pede uma função que receba um vetor X de 30 inteiros e, via parâmetros de saída, produza dois vetores A e B contendo, respectivamente, os valores pares e ímpares de X. O conteúdo aqui é manipulação de arrays e passagem de parâmetros por referência (ponteiros) em C.
Passo 2
Vamos definir a assinatura da função. Precisamos de X como entrada, A e B como vetores de saída e dois ponteiros para inteiros que armazenarão quantos elementos foram gravados em A e em B. Por exemplo: void separarParImpar(int X[30], int A[30], int *nA, int B[30], int *nB).
Passo 3
Dentro da função, a primeira ação é inicializar os contadores de elementos de A e de B. Então fazemos *nA = 0; e *nB = 0;.
Passo 4
Em seguida, percorremos cada elemento de X num loop for de 0 a 29. A cada iteração, aplicamos o teste de paridade usando o operador módulo: X[i] % 2 == 0.
Passo 5
Se for par, copiamos X[i] para A[*nA] e incrementamos (*nA); se for ímpar, copiamos X[i] para B[*nB] e incrementamos (*nB).
Passo 6
Após o loop, A e B estarão preenchidos e os ponteiros nA e nB conterão as quantidades de elementos inseridos. A função encerra sem retorno pois todos os resultados ficaram nos parâmetros por referência.
Resposta
#include <stdio.h>
void separarParImpar(int X[30], int A[30], int *nA, int B[30], int *nB) {
*nA = 0;
*nB = 0;
for (int i = 0; i < 30; i++) {
if (X[i] % 2 == 0) {
A[*nA] = X[i];
(*nA);
} else {
B[*nB] = X[i];
(*nB);
}
}
}
*nA = 0;
*nB = 0;
for (int i = 0; i < 30; i++) {
if (X[i] % 2 == 0) {
A[*nA] = X[i];
(*nA);
} else {
B[*nB] = X[i];
(*nB);
}
}
}
int main() {
int X[30] = { /* 30 inteiros aqui */ };
int A[30], B[30];
int nA, nB;
int X[30] = { /* 30 inteiros aqui */ };
int A[30], B[30];
int nA, nB;
separarParImpar(X, A, &nA, B, &nB);
// Exemplo de impressão
printf("Pares (%d): ", nA);
for (int i = 0; i < nA; i++) printf("%d ", A[i]);
printf("\nÍmpares (%d): ", nB);
for (int i = 0; i < nB; i++) printf("%d ", B[i]);
printf("\n");
return 0;
}