Objetivo: classificar elementos.
Descrição: leia 10 inteiros. Conte quantos são pares e ímpares. Depois, imprima apenas os pares na ordem de entrada.
Critérios:
- Um for para ler; outro para contar e imprimir filtrado.
- Usar if (
== 0 ).
Extensão: criar um vetor só com pares (sem “buracos”).
Descrição: leia 10 inteiros. Conte quantos são pares e ímpares. Depois, imprima apenas os pares na ordem de entrada.
Passo 1
O enunciado pede o seguinte: ler
inteiros, contar quantos são pares e quantos são ímpares, e depois imprimir apenas os pares na ordem em que foram lidos. Informações relevantes fornecidas:
- Devemos ler exatamente
números inteiros. - Precisamos contar dois valores: o número de pares e o número de ímpares.
- Devemos imprimir apenas os pares, na mesma ordem de entrada.
- Critério de implementação: usar um laço for para ler; outro laço for para contar e imprimir filtrado. Usar a condição if (
). - Extensão: construir um vetor que contenha somente os pares, sem “buracos” (ou seja, compactar os pares em um vetor separado).
Passo 2
Estrutura de dados e variáveis necessárias (explicação simples):
- Vetor de entrada: vou chamar de
com tamanho . Em C: int v[10];. Cada posição guarda um inteiro lido. - Contadores:
int npares = 0;eint nimpares = 0;para contar quantos são pares e ímpares, respectivamente. - Vetor só com pares (extensão):
int pares[10];e um índiceint j = 0;que indica quantos pares já foram armazenados empares. Esse vetor tem tamanhoporque no pior caso todos os números são pares.
Passo 3
Como ler os
inteiros com um for (explicação didática):
- Usamos um laço
forcom índicevariando de até (inclusive) — são iterações. - Em cada iteração fazemos
scanf("%d", &v[i]);. - Por que
a ? Porque índices de vetores em C começam em e o último índice de um vetor de tamanho é .
Exemplo de pseudocódigo da leitura:
foraté : leia .
Passo 4
Conceito de par/ímpar e operador módulo (a parte teórica mastigada):
- Um inteiro
é par se é divisível por , ou seja, se o resto da divisão por é . - Em programação usamos o operador resto
\%(módulo). Teste:é par se . - Exemplos simples:
-
→ é par. -
→ é ímpar.
-
- No enunciado foi sugerido usar exatamente a condição
if (v[i] % 2 == 0). Em TeX isso fica(observe que o símbolo de porcentagem no TeX é escrito \%).
Passo 5
O segundo for (contagem e impressão filtrada) — estratégia e passo a passo:
- Percorremos novamente o vetor
com um foraté . - Em cada iteração avaliamos a condição
. - Se for verdadeira:
- incrementamos
npares(por exemplonpares++); - guardamos o valor em
pares[j]e incrementamosj(pares[j++] = v[i];) — isso faz o vetorparesficar compacto, sem “buracos”; - imprimimos o valor
(assim garantimos que os pares saem na ordem de entrada).
- incrementamos
- Caso contrário:
- incrementamos
nimpares.
- incrementamos
- Se for verdadeira:
- Nota sobre ordem de saída: esse laço imprime cada par assim que o encontra, portanto a saída dos pares preserva a ordem de entrada.
Passo 6
Por que o vetor
pares não terá “buracos” (explicação concreta):- Começamos com
j = 0. - Sempre que encontramos um par, fazemos
pares[j] = v[i];e logo em seguidaj = j + 1;. - Isso coloca os pares em
pares[0], pares[1], ..., pares[j-1]de maneira contígua, sem posições vazias entre eles. - Ao final,
jé exatamente o número de pares armazenados — que coincide comnpares.
Passo 7
Formato de saída sugerido e flexibilidade:
- O enunciado não impôs formato de impressão exato, então uma saída clara pode ser:
- Imprimir os pares (um por linha ou todos na mesma linha separados por espaço) na ordem de entrada;
- Depois (ou antes — veja critério de laços) imprimir a quantidade de pares e ímpares.
- Segui a ideia de imprimir cada par quando encontrado (no segundo
for) e depois mostrarnparesenimpares. Isso respeita o critério “um for para ler; outro para contar e imprimir filtrado” e ainda preserva o vetorparescompacto.
Passo 8
Exemplo rápido para checar mentalmente:
- Entrada (10 números):
. - Durante o segundo
for:- Pares encontrados, na ordem:
→ serão impressos nessa ordem. npares = 5,nimpares = 5.
- Pares encontrados, na ordem:
- Vetor
paresterápares[0]=2, pares[1]=4, pares[2]=6, pares[3]=8, pares[4]=10ej = 5.
Passo 9
Dicas rápidas para a prova (tom amigável):
- Lembre-se: primeiro laço só para ler; segundo laço faz a lógica de par/ímpar. Isso é exatamente o que o professor pediu.
- Use
para testar paridade — memorize essa condição. - Para criar um vetor sem “buracos”, controle um índice
jseparado e incremente-o somente quando armazenar um par. - Se der nervoso, escreva primeiro a leitura, depois esqueleto do segundo laço e só então preencha o if/else.
Resposta
#include <stdio.h>
int main(void) {
int v[10];
int pares[10];
int npares = 0;
int nimpares = 0;
int v[10];
int pares[10];
int npares = 0;
int nimpares = 0;
/* Leitura: um for para ler os 10 inteiros */
for (int i = 0; i < 10; i++) {
if (scanf("%d", &v[i]) != 1) return 0;
}
/* Contagem, impressão filtrada e construção do vetor de pares:
um for que faz as três coisas conforme solicitado */
printf("Pares (na ordem de entrada):\n");
for (int i = 0; i < 10; i++) {
if (v[i] % 2 == 0) {
pares[npares] = v[i]; /* armazena sem 'buracos' */
npares++;
printf("%d\n", v[i]); /* imprime o par assim que encontrado */
} else {
nimpares++;
}
}
printf("Quantidade de pares: %d\n", npares);
printf("Quantidade de impares: %d\n", nimpares);
return 0;
}