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 números \{x_1,x_2,\dots,x_n\}, a média aritmética \bar{x} é dada por
\bar{x}=\frac{\sum_{i=1}^{n} x_i}{n}.
Explicando as variáveis dessa fórmula:
  • \sum_{i=1}^{n} x_i significa a soma de todos os termos x_1+x_2+\dots+x_n.
  • n é a quantidade de números somados.
  • \bar{x} é 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 S): começa em 0 e, cada vez que o usuário digita um número válido x\ge 0, fazemos S \leftarrow S + x. No final S=\sum_{i=1}^{n} x_i.
  • Contador (vou chamar de n): começa em 0 e cada número válido incrementa n \leftarrow n+1. No final n é a quantidade total de números somados.
  • A média é então \bar{x}=S / n, se n>0.

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 x; enquanto x\ge 0 faça: acumular x, incrementar contador, ler próximo x. Se ao ler x descobrirmos que é negativo, saímos e não incluímos x.

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):
  1. Inicializar S \leftarrow 0 (acumulador) e n \leftarrow 0 (contador).
  2. 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úmero x for negativo, sair do loop (não incluir x).
    e. Caso contrário ( x\ge 0), fazer S \leftarrow S + x e n \leftarrow n + 1.
  3. Após sair do loop, verificar n:
    a. Se n>0, calcular \bar{x} = S / n e mostrar o resultado.
    b. Se n=0, 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: 4, 2, 6, -1.
  • Então S = 4 + 2 + 6 = 12 e n = 3.
  • A média é \bar{x} = S / n = 12 / 3 = 4.
  • O -1 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()

Exercícios relacionados