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 números positivos x_1,x_2,\dots,x_n, a média aritmética \bar{x} é dada por
\bar{x}=\frac{1}{n}\sum_{i=1}^{n} x_i.
Explicando as variáveis:
  • Cada x_i é um valor inteiro positivo que foi lido.
  • n é a quantidade de valores positivos lidos.
  • \sum_{i=1}^{n} x_i representa a soma de todos esses valores.
No algoritmo vamos manter apenas duas variáveis fundamentais:
  • S: soma acumulada dos valores positivos lidos. Inicialmente S=0.
  • N: contador do número de valores positivos lidos. Inicialmente N=0.
A cada valor lido v:
  • Se v>0 então fazemos S \leftarrow S+v e N \leftarrow N+1.
  • Se v<0 então paramos a leitura.
  • Se v=0 (zero), como não é positivo, não incrementamos S nem N, mas continuamos a leitura (a parada só ocorre com negativo).
Quando a entrada termina (leitura interrompida por um valor negativo), se N>0 calculamos a média
\bar{x}=\frac{S}{N},
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):
  1. Inicializar S e N:
    • S \leftarrow 0
    • N \leftarrow 0
  2. Repetir indefinidamente:
    • Ler um inteiro v.
    • Verificar se v<0. Se sim, sair do laço (parar a leitura).
    • Caso contrário, testar se v>0. Se sim, atualizar S e N:
      • S \leftarrow S + v
      • N \leftarrow N + 1
    • Se v=0, não faz nada (nem soma nem conta), continua o laço.
  3. Depois de sair do laço:
    • Se N>0, calcular \bar{x} = \dfrac{S}{N} e mostrar esse valor (formatar com casas decimais se for desejado).
    • Se N=0, mostrar mensagem informando que nenhum valor positivo foi lido.
Observações de implementação:
  • Como os números lidos são inteiros, a soma S é inteira. A média \bar{x} 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 S ou N 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 é S/N 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: 5, 0, 12, -1.
  • Inicialmente S=0, N=0.
  • v=5. Como v>0: S \leftarrow 0+5=5, N \leftarrow 0+1=1.
  • v=0. Como v=0: ignora, S=5, N=1.
  • v=12. Como v>0: S \leftarrow 5+12=17, N \leftarrow 1+1=2.
  • v=-1. Como v<0: para a leitura.
  • Como N=2>0, calcula média \bar{x} = \dfrac{S}{N} = \dfrac{17}{2}=8{,}5.
  • Resultado mostrado: 8{,}5.
Esse exemplo mostra exatamente como as atualizações de S e N 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 N=0 (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 S ou N para tipo real antes de dividir (por exemplo, em Python: \text{media} = S / N já faz divisão real; em C usar (double)S / N).
  • Se o enunciado exigir considerar zero como positivo, adapte o teste para v \ge 0; aqui seguimos literalmente “positivos” como v>0.

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 S \leftarrow 0
  • Inicializar N \leftarrow 0
  • Repetir
    • Ler v
    • Se v < 0 então
      • Parar a repetição
    • Senão
      • Se v > 0 então
        • S \leftarrow S + v
        • N \leftarrow N + 1
      • FimSe
    • FimSe
  • Até parar
  • Se N > 0 então
    • Calcular \bar{x} \leftarrow \dfrac{S}{N} (divisão real)
    • Mostrar \bar{x}
  • 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

Exercícios relacionados