Construir um algoritmo que calcule a média aritmética de valores inteiros positivos, lidos externamente. O final da leitura acontecerá quando for lido um valor negativo. Mostrar o resultado final.
Passo 1
O enunciado pede para construir um algoritmo que faça duas coisas principais:
- Ler valores inteiros, um por vez, vindos de entrada externa (teclado, arquivo, etc.). Esses valores podem ser positivos, zero ou negativos.
- Parar a leitura quando for lido um valor negativo.
- Calcular e mostrar a média aritmética dos valores inteiros positivos lidos (ou seja, apenas os maiores que zero contam para a média).
Informações explícitas dadas:
- Os valores lidos são inteiros.
- A condição de parada é a leitura de um valor negativo.
- Só devem ser considerados na média os valores inteiros positivos.
- Deve ser mostrado o resultado final (a média).
Casos importantes a observar (sem resolver ainda):
- Pode acontecer de nenhum valor positivo ser lido (ex.: o primeiro número lido já é negativo). Nesse caso a média não está definida da forma usual. É preciso decidir e tratar isso no algoritmo (por exemplo, informar que não há valores para calcular a média).
Passo 2
Conceito matemático que usaremos (a média aritmética):
- Se tivermos
números positivos , a média aritmética é dada por
Explicando as variáveis:
- Cada
é um valor inteiro positivo que foi lido. -
é a quantidade de valores positivos lidos. -
representa a soma de todos esses valores.
No algoritmo vamos manter apenas duas variáveis fundamentais:
-
: soma acumulada dos valores positivos lidos. Inicialmente . -
: contador do número de valores positivos lidos. Inicialmente .
A cada valor lido
:
- Se
então fazemos e . - Se
então paramos a leitura. - Se
(zero), como não é positivo, não incrementamos nem , mas continuamos a leitura (a parada só ocorre com negativo).
Quando a entrada termina (leitura interrompida por um valor negativo), se
calculamos a média
caso contrário informamos que não há valores positivos para calcular.
Passo 3
Estrutura de controle e detalhes práticos (como fazer sem pular etapas):
- Inicializar
e : -
- Repetir indefinidamente:
- Ler um inteiro
. - Verificar se
. Se sim, sair do laço (parar a leitura). - Caso contrário, testar se
. Se sim, atualizar e : -
- Se
, não faz nada (nem soma nem conta), continua o laço.
- Ler um inteiro
- Depois de sair do laço:
- Se
, calcular e mostrar esse valor (formatar com casas decimais se for desejado). - Se
, mostrar mensagem informando que nenhum valor positivo foi lido.
- Se
Observações de implementação:
- Como os números lidos são inteiros, a soma
é inteira. A média geralmente deve ser apresentada como número real (por exemplo, com ponto ou vírgula decimal conforme o padrão). Para evitar divisão inteira (que trunca) é preciso converter ou para tipo real antes da divisão (por exemplo, em pseudocódigo usar conversão ou em linguagens reais usar tipo float/double). - Em provas costuma bastar descrever que a média é
e citar que é uma divisão real. Se for pedir saída com formato, indique quantas casas decimais.
Passo 4
Exemplo numérico passo a passo (para fixar a ideia):
Suponha que as leituras em sequência sejam: .
Suponha que as leituras em sequência sejam:
- Inicialmente
, . - Lê
. Como : , . - Lê
. Como : ignora, , . - Lê
. Como : , . - Lê
. Como : para a leitura. - Como
, calcula média . - Resultado mostrado:
.
Esse exemplo mostra exatamente como as atualizações de
e
funcionam e como tratar zeros e o sinal de parada negativo.
Passo 5
Pontos de atenção para a implementação em prova:
- Deixe claro no algoritmo que a condição de parada é leitura de valor negativo.
- Explícite o tratamento do caso
(evita divisão por zero). - Indique que a divisão final é real (não inteira) para obter média com casas decimais.
- Se for implementar numa linguagem real, lembrar de converter
ou para tipo real antes de dividir (por exemplo, em Python: já faz divisão real; em C usar (double)S / N). - Se o enunciado exigir considerar zero como positivo, adapte o teste para
; aqui seguimos literalmente “positivos” como .
Passo 6
Vou agora escrever o algoritmo em pseudocódigo claro e suficiente para ser aplicado numa prova ou convertido para qualquer linguagem. O pseudocódigo mostra as ações linha a linha; variáveis matemáticas aparecem entre parênteses matemáticos para ficar consistente.
Algoritmo (pseudocódigo):
- Inicializar
- Inicializar
- Repetir
- Ler
- Se
então - Parar a repetição
- Senão
- Se
então -
- FimSe
- Se
- FimSe
- Ler
- Até parar
- Se
então - Calcular
(divisão real) - Mostrar
- Calcular
- Senão
- Mostrar “Nenhum valor positivo foi lido; média indefinida.”
- FimSe
Resposta
S <- 0
N <- 0
repetir
ler v
se v < 0 então
sair do laço
senão
se v > 0 então
S <- S + v
N <- N + 1
fimSe
fimSe
até falso
se N > 0 então
média <- S / N
mostrar média
senão
mostrar “Nenhum valor positivo foi lido; média indefinida.”
fimSe
N <- 0
repetir
ler v
se v < 0 então
sair do laço
senão
se v > 0 então
S <- S + v
N <- N + 1
fimSe
fimSe
até falso
se N > 0 então
média <- S / N
mostrar média
senão
mostrar “Nenhum valor positivo foi lido; média indefinida.”
fimSe