Leia números e armazene-os até o que o usuário digite o primeiro número negativo. Após isso, apresente a média aritmética dos números previamente informados.
Passo 1
O enunciado pede que eu leia números fornecidos pelo usuário e os armazene até que o primeiro número negativo seja digitado; depois disso tenho que calcular e mostrar a média aritmética dos números que foram digitados antes do negativo. Informações relevantes dadas pelo enunciado:
- Ler vários números sequencialmente do usuário.
- A leitura para no primeiro número negativo (esse número negativo não entra na coleção).
- Calcular a média aritmética dos números que foram informados antes do negativo.
- Apresentar (imprimir) a média aritmética no final.
Passo 2
Entendendo exatamente o que é a média aritmética que precisamos calcular. Se eu tiver uma lista de
números
, a média aritmética
é dada por
Explicando as variáveis dessa fórmula:
-
significa a soma de todos os termos . -
é a quantidade de números somados. -
é o resultado final (média).
Passo 3
Estratégia geral do programa (a ideia, em linguagem simples):
- Manter um acumulador para somar os números válidos conforme eles são lidos.
- Manter um contador para saber quantos números válidos foram lidos.
- Repetir a leitura em um loop até que o usuário digite um número negativo.
- Quando o loop terminar, se o contador for maior que zero, calcular a média usando a fórmula do Passo 2; caso contrário informar que não há média (nenhum número válido foi informado).
Passo 4
Por que usamos acumulador e contador? Explico como funcionam:
- Acumulador (vou chamar de
): começa em e, cada vez que o usuário digita um número válido , fazemos . No final . - Contador (vou chamar de
): começa em e cada número válido incrementa . No final é a quantidade total de números somados. - A média é então
, se .
Passo 5
Como parar a leitura no primeiro número negativo (sentinela):
- O termo “sentinela” significa um valor especial que indica fim de entrada; aqui o sentinela é qualquer número negativo.
- Em pseudocódigo o loop fica assim: ler
; enquanto faça: acumular , incrementar contador, ler próximo . Se ao ler descobrirmos que é negativo, saímos e não incluímos .
Passo 6
Considerações de robustez (coisas que acontecem no mundo real):
- O usuário pode digitar algo que não é número (texto). O programa deve detectar isso e pedir nova entrada, sem interromper.
- Se o primeiro valor digitado for negativo, não há números válidos; temos que tratar esse caso e avisar que a média é indefinida (ou escolher um comportamento, mas aqui vou informar que não há média).
Passo 7
Vou descrever o algoritmo em passos concretos e simples (pseudocódigo com explicação):
- Inicializar
(acumulador) e (contador). - Repetir:
a. Pedir ao usuário para digitar um número.
b. Tentar converter a entrada para número (valor real).
c. Se a conversão falhar, avisar e voltar ao passo 2 (pedir de novo).
d. Se o númerofor negativo, sair do loop (não incluir ).
e. Caso contrário (), fazer e . - Após sair do loop, verificar
:
a. Se, calcular e mostrar o resultado.
b. Se, mostrar mensagem dizendo que nenhum número válido foi informado e a média é indefinida.
Passo 8
Exemplo numérico simples para fixar a ideia:
- Suponha que o usuário digite na sequência:
. - Então
e . - A média é
. - O
não entra no cálculo (só indicou o fim da entrada).
Passo 9
Observações sobre representação numérica:
- Se o usuário digitar números inteiros ou com parte decimal, usamos valores reais (float) para aceitar ambos. A média pode ser fracionária, então usamos divisão real.
- Se quiser arredondar a saída para, por exemplo, duas casas decimais, podemos aplicar formatação na impressão; por enquanto vou imprimir o valor natural gerado.
Passo 10
Implementação final (exemplo em Python) com tratamento de entradas inválidas e mensagem caso nenhum número válido seja informado. Esse código segue exatamente o algoritmo dos passos anteriores e é fácil de usar numa prova prática ou em um exercício de programação.
Resposta
def main():
S = 0.0 # acumulador da soma dos números válidos
n = 0 # contador de números válidos
while True:
entrada = input("Digite um número (negativo para terminar): ")
try:
x = float(entrada)
except ValueError:
print("Entrada inválida. Digite um número real (ex: 3.5) ou um inteiro.")
continue
if x < 0:
break
S += x
n += 1
if n > 0:
media = S / n
print(f"Média aritmética: {media}")
else:
print("Nenhum número válido foi informado. Média indefinida.")
if __name__ == "__main__":
main()