Escrever um algoritmo/programa em Pascal que lê 20 valores, um de cada vez, e conta quantos deles estão em cada um dos intervalos [ 0,25 ], (25,50], (50,75], (75,100], escrevendo esta informação.
Passo 1
O que o enunciado pede e quais são os dados fornecidos.
- O programa deve ler exatamente
valores, um por vez. - Para esses
valores, deve contar quantos caem em cada um dos quatro intervalos: -
- No final, o programa deve escrever (imprimir) a quantidade de valores em cada intervalo.
- Observação prática: o enunciado não fala explicitamente sobre valores fora de
a . Vou explicar como tratar esses casos e vou incluir uma contagem opcional para valores fora desses intervalos (útil para depuração).
Passo 2
Entendendo os intervalos e as regras de inclusão/exclusão de extremos.
- Intervalo
significa: inclui e inclui . Em notação lógica, um valor está em se e somente se . - Intervalo
significa: não inclui , inclui . Em lógica: . - Intervalo
significa: . - Intervalo
significa: .
Importante: a maneira como testamos essas condições no programa tem que respeitar essa ordem de inclusão/exclusão. Por exemplo, um valor exatamente igual a
pertence ao primeiro intervalo
, não ao segundo.
Passo 3
Escolha dos tipos de variáveis (em Pascal) e contadores.
- Vamos ler valores que podem ser números com parte fracionária: use tipo
realpara a variável que recebe cada entrada, chamarei dev. - Precisamos de quatro contadores inteiros (tipo
integer) para contar quantos caem em cada intervalo. Nomearei:c1parac2parac3parac4para
- Opcionalmente, um contador
coutpara valores fora dea (se desejar mostrar).
Passo 4
Estrutura geral do algoritmo — laço de leitura e decisões.
- Fazer um laço que execute exatamente
vezes: for i := 1 to 20 do. - Em cada iteração:
- Ler o valor em
v(umreal). - Testar, em ordem, qual condição de intervalo é satisfeita:
- Se
então incrementar c1. - Senão, se
então incrementar c2. - Senão, se
então incrementar c3. - Senão, se
então incrementar c4. - Senão (caso
vesteja fora do conjunto), incrementar cout(opcional).
- Se
- Ler o valor em
- Usar a ordem das condições exatamente como acima evita ambiguidade nos limites
.
Passo 5
Como escrever as condições em Pascal (detalhe prático).
- Em Pascal usamos operadores relacionais
<=,<,>e o operador lógicoand. - A condição
vira em Pascal: (v >= 0) and (v <= 25). - A condição
vira: (v > 25) and (v <= 50). - E assim por diante.
- É importante colocar parênteses porque
ande os comparadores precisam de agrupamento claro.
Passo 6
Tratamento de entradas inválidas e comportamento desejado.
- O enunciado apenas pede a contagem nos intervalos; não exige avisos para entradas inválidas.
- Porém, é boa prática:
- contar quantos valores ficaram fora de
(contador cout) e opcionalmente mostrar. - não interromper a leitura se aparecer um valor fora da faixa — apenas contar como “fora”.
- contar quantos valores ficaram fora de
- Na versão que vou fornecer, eu incluo
coute mostro esse número ao final; se preferir, basta removercoute o ramo correspondente.
Passo 7
Pseudocódigo simples (para entender antes do código Pascal).
- Inicializar
c1 := 0,c2 := 0,c3 := 0,c4 := 0,cout := 0. - Para
ideaté : - Ler
v. - Se
(v >= 0) and (v <= 25)entãoc1 := c1 + 1 - Senão se
(v > 25) and (v <= 50)entãoc2 := c2 + 1 - Senão se
(v > 50) and (v <= 75)entãoc3 := c3 + 1 - Senão se
(v > 75) and (v <= 100)entãoc4 := c4 + 1 - Senão
cout := cout + 1
- Ler
- Imprimir
c1,c2,c3,c4(ecoutse quiser).
Passo 8
Programa Pascal completo e comentado (copia e cole no seu compilador).
program ContadorIntervalos;
{ Lê 20 valores e conta quantos estão em cada intervalo:
[0,25], (25,50], (50,75], (75,100]
Também conta valores fora de [0,100] (cout) para informação. }
var
i: integer;
v: real;
c1, c2, c3, c4, cout: integer;
begin
{ Inicializa contadores }
c1 := 0;
c2 := 0;
c3 := 0;
c4 := 0;
cout := 0;
writeln('Entre com 20 valores (um por linha):');
{ Loop de leitura das 20 entradas }
for i := 1 to 20 do
begin
readln(v);
if (v >= 0) and (v <= 25) then
c1 := c1 + 1
else if (v > 25) and (v <= 50) then
c2 := c2 + 1
else if (v > 50) and (v <= 75) then
c3 := c3 + 1
else if (v > 75) and (v <= 100) then
c4 := c4 + 1
else
cout := cout + 1; { valor fora de [0,100] }
end;
{ Impressão dos resultados }
writeln('Quantidade em [0,25]: ', c1);
writeln('Quantidade em (25,50]: ', c2);
writeln('Quantidade em (50,75]: ', c3);
writeln('Quantidade em (75,100]: ', c4);
writeln('Quantidade fora de [0,100]: ', cout);
end.
Passo 9
Explicação linha a linha (ajuda para a prova — entenda o que faz cada parte)
program ContadorIntervalos;— nome do programa.var i: integer; v: real; ...— declaração das variáveis;vrecebe cada valor lido, osc1..c4ecoutacumulam as contagens.for i := 1 to 20 do— repete o bloco exatamentevezes, como o enunciado pede. readln(v);— lê um valor (pode ser real).- A cadeia
if ... else if ... elsegarante que cada valor seja contado em no máximo um dos contadores e que os limites sejam tratados conforme a especificação (entra no primeiro, no segundo, etc.). - As últimas
writelnexibem os resultados. A linha comcouté opcional; mostra quantos valores estavam fora de.
Passo 10
Dicas para a prova e pontos que costumam cair:
- Não se esqueça dos sinais de igualdade nos extremos: o primeiro intervalo inclui
, então use <= 25nele. Valores exatamente iguais anão devem ser testados no segundo intervalo. - Verifique a ordem das condições: se fizesse
if v <= 50 then ...sem checar antes o primeiro intervalo, poderia contar errado. Por isso colocar o teste deprimeiro é seguro. - Sempre inicialize os contadores com zero antes do laço.
- Se a entrada for inteira no enunciado, dá para usar
integerparav, mas usarrealé mais geral e seguro (se entrarem números fracionários). - Teste seu programa com casos limites:
, , , , e com valores menores que ou maiores que .
Resposta
program ContadorIntervalos;
{ Lê 20 valores e conta quantos estão em cada intervalo:
[0,25], (25,50], (50,75], (75,100]
Também conta valores fora de [0,100] (cout) para informação. }
var
i: integer;
v: real;
c1, c2, c3, c4, cout: integer;
begin
{ Inicializa contadores }
c1 := 0;
c2 := 0;
c3 := 0;
c4 := 0;
cout := 0;
writeln('Entre com 20 valores (um por linha):');
{ Loop de leitura das 20 entradas }
for i := 1 to 20 do
begin
readln(v);
if (v >= 0) and (v <= 25) then
c1 := c1 + 1
else if (v > 25) and (v <= 50) then
c2 := c2 + 1
else if (v > 50) and (v <= 75) then
c3 := c3 + 1
else if (v > 75) and (v <= 100) then
c4 := c4 + 1
else
cout := cout + 1; { valor fora de [0,100] }
end;
{ Impressão dos resultados }
writeln('Quantidade em [0,25]: ', c1);
writeln('Quantidade em (25,50]: ', c2);
writeln('Quantidade em (50,75]: ', c3);
writeln('Quantidade em (75,100]: ', c4);
writeln('Quantidade fora de [0,100]: ', cout);
end.