Escrever um algoritmo que leia 50 valores, encontre o maior e o menor deles e mostre o resultado.
Passo 1
O que o enunciado pede e o que foi dado:
- Pedido: escrever um algoritmo que leia
valores, encontre o maior e o menor entre eles e mostre esses resultados. - Dados/assunções: serão lidos exatamente
valores numéricos (podem ser inteiros ou reais). Não foi dito nada sobre tratamento de erro para entradas não numéricas, então assumimos que todas as leituras são válidas. - Saídas esperadas: dois números — o maior valor lido e o menor valor lido.
Passo 2
Ideia geral do método (explicação simples e intuitiva):
- Percorrer os
valores um por um e manter duas variáveis que guardam, a todo momento, o maior e o menor valor vistos até aquele instante. - Sempre que um novo valor lido for maior que a variável que guarda o maior, atualizamos essa variável. Do mesmo modo, se o novo valor for menor que a variável que guarda o menor, atualizamos essa outra variável.
- No final da leitura dos
valores, as duas variáveis contêm, respectivamente, o maior e o menor valor da sequência.
Passo 3
Por que inicializar com o primeiro valor lido (estratégia escolhida):
- Uma forma segura de inicializar é ler o primeiro valor e atribuí-lo simultaneamente a
e a . Assim evitamos depender de valores especiais como ou e funciona para qualquer tipo de número (positivo, negativo, zero). - Alternativa seria inicializar
com um valor muito pequeno e com um valor muito grande, mas isso é desnecessário e arriscado. Usar o primeiro valor é mais simples e robusto.
Passo 4
Definição das variáveis que usaremos (com explicação do papel de cada uma):
-
: variável que recebe cada valor lido do teclado (valor atual). -
: guarda, a cada passo, o maior valor encontrado até então. -
: guarda, a cada passo, o menor valor encontrado até então. -
: índice do laço, que vai controlar quantas leituras já foram feitas (vai de a ).
Passo 5
Descrição passo a passo do algoritmo (cada linha explicada):
- Leia o primeiro valor e armazene em
. - Explicação: essa leitura inicial serve para inicializar
e .
- Explicação: essa leitura inicial serve para inicializar
- Faça
e . - Explicação: agora tanto
quanto têm um valor válido para comparação.
- Explicação: agora tanto
- Para
de até faça: - Leia um novo valor e armazene em
. - Se
então faça . - Explicação: se o valor atual for maior que o maior conhecido, atualizamos o maior.
- Se
então faça . - Explicação: se o valor atual for menor que o menor conhecido, atualizamos o menor.
- Volte para o próximo
até completar as leituras.
- Leia um novo valor e armazene em
- Depois do laço, escreva (mostre)
e . - Explicação: ao final, essas variáveis contêm os resultados pedidos.
Passo 6
Exemplo rápido (para fixar a ideia) — passo a passo com poucos números:
- Suponha as primeiras
leituras (só para exemplificar): . - Leitura
: . Inicializa , . - Leitura
: . Como ? não. Como ? sim → . Agora , . - Leitura
: . ? sim → . ? não. Agora , . - Leitura
: . ? não. ? não. Mantém , . - Leitura
: . ? não. ? não (é igual). Mantém , . - Ao final (após
leituras reais) as variáveis conterão o maior e o menor de toda a sequência.
Passo 7
Casos especiais e observações práticas:
- Se todos os
valores forem iguais, e terão esse mesmo valor — tudo certo. - Se algum valor for negativo ou decimal, o método continua válido.
- Se houver possibilidade de entradas inválidas (texto, etc.), o algoritmo real deveria validar cada leitura; aqui assumimos leituras numéricas válidas conforme enunciado.
- O algoritmo realiza exatamente
comparações de e depois da primeira leitura (no total aprox. comparações no pior caso), então é muito rápido. Se generalizarmos para valores, a complexidade é .
Passo 8
Implementação final (pseudocódigo claro e pronto para usar)
- Abaixo está o pseudocódigo conciso que implementa tudo que expliquei. Ele pode ser copiado para um programa real com pequenas adaptações de sintaxe.
Resposta
Leia o primeiro valor e armazene em
Para até
faça
\quad Leia
\quad Se então
\quad Se então
Fim Para
Escreva
Escreva
Para
\quad Leia
\quad Se
\quad Se
Fim Para
Escreva
Escreva