Elaborar um programa em Pascal,que leia as ALTURAS em metros, de 120 atletas, calcule e imprima o valor da maior e da menor altura do grupo e quantos atletas são BAIXOS (
), quantos têm ALTURA MEDIANA (
), quantas são altos (
) . RODE O PROGRAMA PARA UM GRUPO DE 6 ATLETAS.
Passo 1
O enunciado pede que a gente leia as ALTURAS em metros de um grupo de atletas (originalmente
atletas) e calcule e imprima:
- a maior altura do grupo;
- a menor altura do grupo;
- quantos atletas são BAIXOS (condição
); - quantos têm ALTURA MEDIANA (condição
); - quantos são ALTOS (condição
).
Informações relevantes fornecidas:
- número total de atletas:
(o programa deve ser pensado para esse número); - categorias definidas pelas desigualdades:
, , ; - pedido adicional do enunciado: “RODE O PROGRAMA PARA UM GRUPO DE 6 ATLETAS” — ou seja, além do programa para 120, precisamos demonstrar uma execução usando
alturas de exemplo.
Para a execução de demonstração vou usar o conjunto de
alturas abaixo (escolhidas para cobrir todas as categorias):
Passo 2
Ideia geral do método (sem código ainda): percorrer todas as alturas uma por uma e manter:
- a maior altura encontrada até agora (
); - a menor altura encontrada até agora (
); - contadores para cada categoria:
, , .
Ao ler cada nova altura
:
- Se
atualiza . - Se
atualiza . - Verifica em qual faixa
se encaixa para incrementar o contador correspondente: - se
então ; - senão se
então ; - senão (ou seja,
) então .
- se
Por que isso funciona? Porque ao varrer cada elemento uma vez e atualizar máximos/mínimos e contadores usando comparações simples, obtemos as informações desejadas com complexidade linear
e sem precisar armazenar todas as alturas (memória constante).
Observação importante de implementação: para inicializar
e
de maneira segura, uma técnica simples é ler a primeira altura fora do laço e atribuí-la tanto a
quanto a
; isso evita usar valores extremos arbitrários.
Passo 3
Explicando as variáveis que vamos usar (bem mastigado):
-
: número total de atletas que o programa vai ler (no enunciado , para teste ). -
: índice do laço (inteiro) que vai de até . -
(ou altura): variável do tipo real que guarda a altura lida em metros, por exemplo. -
: variável real que guarda a maior altura encontrada até o momento. -
: variável real que guarda a menor altura encontrada até o momento. -
, , : contadores inteiros iniciados em que acumulam quantos atletas caem em cada faixa.
Tipos (em Pascal):
- inteiros:
integer; - reais (com casas decimais):
real.
Observação prática sobre notação decimal no Pascal: no código fonte (Free Pascal/Turbo Pascal) usa-se ponto decimal, por exemplo
1.80. Nas explicações matemáticas em português escrevemos 1,80 com vírgula. Fique tranquilo — no código usaremos o formato que o compilador espera.Passo 4
Aqui está o programa em Pascal bem explicado. Ele foi escrito para
(conforme enunciado); para testar rápido você pode mudar a constante
NUM para 6.program Alturas;
const
NUM = 120; { Mude para 6 para testar a execução com 6 atletas }
var
i, baixos, medianos, altos: integer;
altura, maior, menor: real;
begin
baixos := 0; medianos := 0; altos := 0;
writeln('Digite ‘, NUM, ’ alturas em metros, uma por linha:’);
{ Leitura da primeira altura para inicializar maior e menor }
readln(altura);
maior := altura;
menor := altura;
{ Classifica a primeira altura }
if altura < 1.80 then baixos := baixos + 1
else if (altura >= 1.80) and (altura <= 1.95) then medianos := medianos + 1
else altos := altos + 1;
{ Leitura das demais alturas }
for i := 2 to NUM do
begin
readln(altura);
if altura > maior then maior := altura;
if altura < menor then menor := altura;
if altura < 1.80 then baixos := baixos + 1
else if (altura >= 1.80) and (altura <= 1.95) then medianos := medianos + 1
else altos := altos + 1;
end;
writeln('Maior altura: ‘, maior:0:2, ’ m’);
writeln('Menor altura: ‘, menor:0:2, ’ m’);
writeln('Baixos (H<1.80): ', baixos);
writeln('Altura mediana (1.80<=H<=1.95): ', medianos);
writeln('Altos (H>1.95): ', altos);
end.
const
NUM = 120; { Mude para 6 para testar a execução com 6 atletas }
var
i, baixos, medianos, altos: integer;
altura, maior, menor: real;
begin
baixos := 0; medianos := 0; altos := 0;
writeln('Digite ‘, NUM, ’ alturas em metros, uma por linha:’);
{ Leitura da primeira altura para inicializar maior e menor }
readln(altura);
maior := altura;
menor := altura;
{ Classifica a primeira altura }
if altura < 1.80 then baixos := baixos + 1
else if (altura >= 1.80) and (altura <= 1.95) then medianos := medianos + 1
else altos := altos + 1;
{ Leitura das demais alturas }
for i := 2 to NUM do
begin
readln(altura);
if altura > maior then maior := altura;
if altura < menor then menor := altura;
if altura < 1.80 then baixos := baixos + 1
else if (altura >= 1.80) and (altura <= 1.95) then medianos := medianos + 1
else altos := altos + 1;
end;
writeln('Maior altura: ‘, maior:0:2, ’ m’);
writeln('Menor altura: ‘, menor:0:2, ’ m’);
writeln('Baixos (H<1.80): ', baixos);
writeln('Altura mediana (1.80<=H<=1.95): ', medianos);
writeln('Altos (H>1.95): ', altos);
end.
Explicação linha a linha (resumida):
const NUM = 120;define quantos atletas o programa espera. Troque para6só para testar.baixos := 0; medianos := 0; altos := 0;inicializa os contadores.readln(altura); maior := altura; menor := altura;lê a 1ª altura e usa ela para inicializarmaioremenor.- As estruturas
if ... then ... else if ... else ...classificam cada altura nas faixas pedidas. - O
for i := 2 to NUM dofaz a leitura do resto das alturas e atualiza máximo, mínimo e contadores. writeln(..., maior:0:2, ...)imprime os números com duas casas decimais.
Passo 5
Muito prático: por que inicializar com a primeira leitura? Porque se eu colocasse
maior := 0.0 ou menor := 999.0 poderia introduzir erro caso todas as alturas fossem negativas (hipotético) ou maior que o valor escolhido. Inicializar com a primeira leitura garante consistência e é a técnica mais usada.Agora vamos executar manualmente o algoritmo com os
valores de teste (lembrando que, para testar no código, basta mudar
NUM := 6):Conjunto de entrada (as
alturas escolhidas):
Passo a passo das iterações:
- Iteração 1 (primeira leitura):
- maior :=
- menor :=
- classificação:
→ baixos = 1, medianos = 0, altos = 0
- maior :=
- Iteração 2:
- compara com maior:
→ maior := - compara com menor:
? não → menor permanece - classificação:
→ medianos := 1 - contadores agora: baixos = 1, medianos = 1, altos = 0
- compara com maior:
- Iteração 3:
-
→ maior := - menor permanece
-
→ medianos := 2 - contadores: baixos = 1, medianos = 2, altos = 0
-
- Iteração 4:
-
→ maior := - menor permanece
- classificação:
→ altos := 1 - contadores: baixos = 1, medianos = 2, altos = 1
-
- Iteração 5:
-
? não → maior permanece -
? sim → menor := - classificação:
→ baixos := 2 - contadores: baixos = 2, medianos = 2, altos = 1
-
- Iteração 6:
-
? não → maior permanece -
? não → menor permanece - classificação:
pertence à faixa mediana → medianos := 3 - contadores finais: baixos = 2, medianos = 3, altos = 1
-
Resultado final esperado (após varrer as 6 alturas): maior
m; menor
m; baixos
; mediano
; altos
.
Passo 6
Dicas práticas para a prova (como lembrar e fazer rápido):
- Pense em uma única varredura (um laço) — isso é suficiente para máximos, mínimos e contagem por categoria.
- Inicialize máximo e mínimo com a primeira leitura para evitar pensar em “infinito”.
- Use
else ifpara não avaliar desnecessariamente condições (ganho pequeno de eficiência e evita duplas contagens). - No enunciado da prova, copie as desigualdades exatamente:
, , . Em dúvida sobre inclusão do limite e , repare que o enunciado incluiu os limites na faixa mediana.
Resposta
Maior altura:
m
Menor altura: m
Baixos (H<1,80):
Altura mediana (1,80\le H\le 1,95):
Altos (H>1,95):
Menor altura:
Baixos (H<1,80):
Altura mediana (1,80\le H\le 1,95):
Altos (H>1,95):