Elabore um algoritmo computacional em Pascal/Delphi que, a partir de um vetor de dados numéricos inteiros, conte quantos números são pares e quantos são impares e apresente ao final o resultado.
Passo 1
O que o enunciado pede e o que ele dá:
- Pede-se um algoritmo/com programa em Pascal/Delphi que, a partir de um vetor (lista) de números inteiros, conte quantos são pares e quantos são ímpares e mostre os resultados no final.
- Informação disponível: um vetor de números inteiros (o enunciado não impõe tamanho fixo nem forma de entrada). Então é preciso permitir receber um tamanho
e em seguida valores inteiros. - Resultado esperado: dois números — a quantidade de pares e a quantidade de ímpares.
Passo 2
Definição de par e ímpar (a ideia matemática que vamos usar)
- Um inteiro é par se for divisível por
; isto é, se o resto da divisão por for zero. - Em notação:
. - Caso contrário, é ímpar:
. - Observação prática: para lidar com números negativos de forma segura, é comum testar
, mas na maioria das implementações de Pascal usar funciona se soubermos como a linguagem trata o sinal. Aqui usaremos por segurança.
Passo 3
Escolha do método e estrutura de dados (por que esse método)
- Método simples e direto (o melhor para prova): percorrer o vetor uma vez, verificar cada elemento e incrementar dois contadores (um para pares e outro para ímpares).
- Complexidade: tempo
, memória adicional constante além do vetor. - Estrutura: vetor dinâmico (array dinâmico) para aceitar qualquer
. Em Pascal/Delphi usa-se SetLengthpara criar o vetor em tempo de execução.
Passo 4
Variáveis necessárias (explicando tipos e por que cada uma)
-
inteiro — número de elementos do vetor (entrada). -
array of Integer — vetor que guarda os inteiros. -
inteiro — índice do laço. -
inteiro — contador de números pares. -
inteiro — contador de números ímpares.
Explicação breve de tipos:Integeré o tipo inteiro padrão em Pascal/Delphi; ele armazena números inteiros (positivos e negativos).
Passo 5
Pseudocódigo do algoritmo (visão geral passo a passo)
- Ler
(quantidade de elementos). - Alocar vetor
arrcom tamanho. - Para
de até : ler arr[i]. - Inicializar
pares := 0eimpares := 0. - Para
de até : - Se
então pares := pares + 1 - Senão
impares := impares + 1
- Se
- Imprimir
pareseimpares.
Passo 6
Explicando o operador
mod e a função Abs em Pascal/Delphix mod yretorna o resto da divisão inteira dexpory. Usamosx mod 2para saber sexé divisível por2.Abs(x)retorna o valor absoluto dex(isto é,). Usamos Abspara garantir que o teste de paridade não seja afetado pelo sinal do número (por segurança e clareza).- Em Pascal/Delphi a expressão
if (Abs(value) mod 2 = 0) then ...indica quevalueé par.
Passo 7
Detalhando o loop e índices no Pascal/Delphi
- Em Pascal há duas convenções comuns de índices: usar
0..n-1ou1..n. Eu vou usar0..n-1porque é muito comum em programação e facilita uso deSetLength(arr, n)— o índice inicial será0. - Laço
for i := 0 to n-1 dopercorre todos os elementos do vetor. - Em cada iteração lemos o elemento e depois fazemos o teste
if (Abs(arr[i]) mod 2 = 0) then Inc(pares) else Inc(impares);.Inc(x)é uma forma concisa dex := x + 1.
Passo 8
Programa completo em Pascal/Delphi — linha a linha com explicação (antes de dar o código final)
program ContagemParesImpares;— nome do programa (opcional).uses SysUtils;— traz utilitários comoAbs(em Delphi/Free PascalAbsestá disponível por padrão, masSysUtilsé seguro).var n, i, value, pares, impares: Integer; arr: array of Integer;— declaração das variáveis e do array dinâmico.- Leitura de
ncomReadLn(n);— usuário informa quantos números virão. SetLength(arr, n);— alocanposições no vetor.- Primeiro laço para ler os
nvalores comReadLn(arr[i]);. - Zerar contadores com
pares := 0; impares := 0;. - Segundo laço para verificar cada elemento e incrementar o contador correspondente.
- Impressão dos resultados com
Writeln('Pares: ', pares);eWriteln('Impares: ', impares);. - Tratamento: se
n = 0o programa simplesmente imprimePares: 0eImpares: 0.
Passo 9
Exemplo de execução (para fixar)
- Entrada:
-
- vetor:
-
- Passo a passo dos testes:
-
→ par -
→ ímpar -
→ par -
→ ímpar -
→ par -
→ ímpar
-
- Resultado final impresso:
- Pares: 3
- Impares: 3
Passo 10
Dicas rápidas para usar na prova e cuidados
- Se o enunciado dá o vetor pronto (por ex. já declarado no código), adapte o programa removendo a leitura e preenchendo o array manualmente.
- Se estiver usando uma versão antiga de Pascal que não suporta arrays dinâmicos, use um array com tamanho máximo fixo, por exemplo
arr: array[1..1000] of Integer;e leia atén(certifique-se de quen <= 1000). - Verifique
n >= 0antes de alocar. Em prova, se não disser nada, pode assumir. - Teste com
n = 0e com números negativos e zero para garantir comportamento correto.
Passo 11
Complexidade e justificativa final
- Tempo:
— percorre o vetor uma vez para ler e outra vez para contar (pode ser feito em um só laço lendo e contando ao mesmo tempo, se preferir). - Espaço:
para armazenar o vetor (ou extra se for contar enquanto lê sem guardar). - Em prova, se o enunciado só pede contar, pode-se otimizar para não armazenar o vetor: ler cada número, testá-lo e atualizar os contadores imediatamente — assim economiza memória.
Resposta
program ContagemParesImpares;
uses SysUtils;
var
n, i, pares, impares: Integer;
arr: array of Integer;
begin
Write('Quantidade de elementos: ');
ReadLn(n);
if n < 0 then
begin
Writeln(‘Valor de n invalido (precisa ser >= 0).’);
Exit;
end;
SetLength(arr, n);
for i := 0 to n - 1 do
begin
Write('Elemento ', i + 1, ': ');
ReadLn(arr[i]);
end;
pares := 0;
impares := 0;
for i := 0 to n - 1 do
begin
if (Abs(arr[i]) mod 2 = 0) then
Inc(pares)
else
Inc(impares);
end;
Writeln('Pares: ', pares);
Writeln('Impares: ', impares);
end.
uses SysUtils;
var
n, i, pares, impares: Integer;
arr: array of Integer;
begin
Write('Quantidade de elementos: ');
ReadLn(n);
if n < 0 then
begin
Writeln(‘Valor de n invalido (precisa ser >= 0).’);
Exit;
end;
SetLength(arr, n);
for i := 0 to n - 1 do
begin
Write('Elemento ', i + 1, ': ');
ReadLn(arr[i]);
end;
pares := 0;
impares := 0;
for i := 0 to n - 1 do
begin
if (Abs(arr[i]) mod 2 = 0) then
Inc(pares)
else
Inc(impares);
end;
Writeln('Pares: ', pares);
Writeln('Impares: ', impares);
end.