Crie um programa no qual o usuário informe o código do cargo de um funcionário (ver tabela abaixo) e o seu respectivo salário. Para encerrar a leitura dos dados, defina uma condição de parada (por exemplo, código do cargo igual a zero). Ao fim, o programa deve informar a média salarial dos nutricionistas.
CÓDIGO CARGO
1 Enfermeiro
2 Nutricionista
3 Médico

Passo 1

O problema pede que a gente crie um programa em que o usuário informe repetidamente o código do cargo de um funcionário e o seu salário, até que uma condição de parada seja acionada. Ao final, o programa deve informar a média salarial dos nutricionistas. Dados fornecidos (tabela no enunciado): \n
Código \,1 — Enfermeiro\n
Código \,2 — Nutricionista\n
Código \,3 — Médico\n
Condição de parada sugerida: código igual a \,0. \n
O que exatamente o enunciado pergunta que o programa faça: leia pares (código, salário) até o código sentinel \,0 e calcule a média salarial apenas para os funcionários cujo código é \,2 (nutricionistas). Se não houver nutricionistas, o programa deve informar isso de forma clara.

Passo 2

Escolhendo a ideia central do programa (sem entrar ainda em código): precisamos de um loop que repete a leitura até encontrar o sentinel \,0. Dentro do loop, quando o código informado for \,2, acumulamos o salário em uma soma e incrementamos um contador. Fora do loop, calculamos a média usando a soma e o contador (se o contador for zero, informamos que não houve nutricionistas). Não faremos nada com outros códigos além de ignorá-los para a média (mas podemos validar/avisar se o código for inválido).

Passo 3

Explicando passo a passo a lógica do loop sentinel (conceito):\n
  • Um sentinel é um valor especial que indica “pare de ler”. Aqui o sentinel é o código \,0.\n
  • Estrutura típica: iniciar variáveis de controle; entrar em um loop infinito (ou loop que testa uma condição); a cada iteração ler o código; se o código for o sentinel, quebrar o loop; caso contrário, ler o salário e tratar conforme o código.\n
    Isso evita precisar saber antecipadamente quantos funcionários serão informados.

Passo 4

Variáveis que vamos usar e por quê:\n
  • soma: armazena a soma acumulada dos salários dos nutricionistas. Inicialmente soma = 0,0.\n
  • contagem (ou cont): conta quantos nutricionistas já foram lidos. Inicialmente contagem = 0.\n
  • codigo: recebe o código do cargo lido a cada iteração.\n
  • salario: recebe o salário lido a cada iteração.\n
    No final, a média será dada pela fórmula\n
\text{média} \;=\; \frac{\text{soma}}{\text{contagem}}é
onde \text{soma} é a soma dos salários de todos os nutricionistas e \text{contagem} é o número de nutricionistas. Se \text{contagem}=0, não podemos dividir — então tratamos esse caso separadamente.

Passo 5

Pseudocódigo (visão clara, sem ainda mostrar código real):\n
  1. Inicializar soma \leftarrow 0,0 e contagem \leftarrow 0.\n
  2. Repetir:\n
  • Ler codigo.\n
  • Se codigo = 0 então sair do loop.\n
  • Se codigo é inválido (não está entre \,1, \,2, \,3), avisar e continuar para a próxima iteração.\n
  • Ler salario.\n
  • Se codigo = 2 então soma \leftarrow soma + salario e contagem \leftarrow contagem + 1.\n
  1. Após o loop: se contagem > 0 então calcular \text{média} = \dfrac{soma}{contagem}é e mostrar; senão mostrar mensagem indicando que não houve nutricionistas.\n
    Esse pseudocódigo já é exatamente o algoritmo que você implementaria numa prova em forma de fluxograma ou código.

Passo 6

Validações e detalhes práticos (o que pode dar errado e como tratar):\n
  • Entrada de código: validar que é inteiro; se o usuário digitar algo não numérico, pedir novamente.\n
  • Entrada de salário: validar que é número (float) e não negativo (salários negativos não fazem sentido). Para entrada com vírgula (ex.: 2.500,50), é comum lidar substituindo a vírgula por ponto ao converter.\n
  • Tratamento do caso sem nutricionistas: informar claramente que não há dados para calcular a média.\n
  • Formatação da média: geralmente apresentamos com duas casas decimais.\n
    Essas validações ajudam a evitar travamentos na hora da prova/uso e mostram cuidado com entradas.

Passo 7

Exemplo prático (para fixar a ideia): suponha que o usuário informe os seguintes pares na ordem: \,(2,\,2500{,}00),\\ (1,\,3000{,}00),\\ (2,\,3500{,}00),\\ (0).\n
  • Ao ler o primeiro par \,(2,\,2500{,}00): como o código é \,2, fazemos soma \leftarrow 2500{,}00 e contagem \leftarrow 1.\n
  • O segundo par \,(1,\,3000{,}00) tem código diferente de \,2, então ignoramos para a média.\n
  • O terceiro par \,(2,\,3500{,}00): soma \leftarrow 2500{,}00 + 3500{,}00 = 6000{,}00, contagem \leftarrow 2.\n
  • Ao ler \,0 paramos. A média será\n
\text{média} = \frac{6000{,}00}{2} = 3000{,}00.é
Esse cálculo você pode fazer facilmente sem calculadora em muitos casos — some e divida pelo contador.

Passo 8

Dicas práticas para a prova (como escrever rápido e correto):\n
  • Declare as variáveis iniciais claramente: soma = 0{,}0, contagem = 0.\n
  • Use um while ou loop repetitivo com checagem do sentinel logo após a leitura do código.\n
  • Sempre trate divisão por zero antes de tentar calcular a média.\n
  • Se for pedido, escreva mensagens claras de saída: por exemplo, “Média salarial dos nutricionistas: R$ 3000,00” ou “Nenhum nutricionista cadastrado”.\n
  • Se for necessário pseudocódigo, use a forma do Passo 5 — é direta e prova que você entendeu o algoritmo.

Passo 9

Resumo do que implementar no código final:\n
  • Loop de leitura com sentinel \,0.\n
  • Somar salários apenas quando codigo = 2.\n
  • Contar quantos nutricionistas houve.\n
  • No final, calcular \text{média} = \dfrac{soma}{contagem}é se contagem>0 ou imprimir aviso caso contrário.\n
    Pronto! Agora vem a parte prática — o programa em si.

Resposta

# Programa para calcular a média salarial dos nutricionistas (código 2).
# Digite 0 no código para encerrar.

def ler_int(prompt):
    while True:
        try:
            return int(input(prompt))
        except ValueError:
            print("Entrada inválida. Digite um número inteiro.")

def ler_float(prompt):
    while True:
        s = input(prompt).strip()
        s = s.replace(',', '.')  # aceita vírgula como separador decimal
        try:
            return float(s)
        except ValueError:
            print("Entrada inválida. Digite um número (ex.: 2500 ou 2500,50).")

def main():
    print("Informe o código do cargo: 1-Enfermeiro, 2-Nutricionista, 3-Médico. Digite 0 para encerrar.")
    soma = 0.0
    cont = 0

    while True:
        codigo = ler_int("Código: ")
        if codigo == 0:
            break
        if codigo not in (1, 2, 3):
            print("Código desconhecido. Use 1, 2, 3 ou 0 para sair.")
            continue

        salario = ler_float("Salário: R$ ")
        if salario < 0:
            print("Salário inválido (negativo). Tente novamente.")
            continue

        if codigo == 2:
            soma += salario
            cont += 1

    if cont == 0:
        print("Não houve nutricionistas cadastrados.")
    else:
        media = soma / cont
        print(f"Média salarial dos nutricionistas: R$ {media:.2f}")

if __name__ == "__main__":
    main()

Exercícios relacionados