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
| 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 — Enfermeiro\n
Código — Nutricionista\n
Código — Médico\n
Condição de parada sugerida: código igual a . \n
O que exatamente o enunciado pergunta que o programa faça: leia pares (código, salário) até o código sentinel e calcule a média salarial apenas para os funcionários cujo código é
(nutricionistas). Se não houver nutricionistas, o programa deve informar isso de forma clara.
Código
Código
Código
Condição de parada sugerida: código igual a
O que exatamente o enunciado pergunta que o programa faça: leia pares (código, salário) até o código sentinel
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
. Dentro do loop, quando o código informado for
, 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
.\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
-
: armazena a soma acumulada dos salários dos nutricionistas. Inicialmente .\n -
(ou ): conta quantos nutricionistas já foram lidos. Inicialmente .\n -
: recebe o código do cargo lido a cada iteração.\n -
: recebe o salário lido a cada iteração.\n
No final, a média será dada pela fórmula\n
onde
é a soma dos salários de todos os nutricionistas e
é o número de nutricionistas. Se
, não podemos dividir — então tratamos esse caso separadamente.
Passo 5
Pseudocódigo (visão clara, sem ainda mostrar código real):\n
- Inicializar
e .\n - Repetir:\n
- Ler
.\n - Se
então sair do loop.\n - Se
é inválido (não está entre , , ), avisar e continuar para a próxima iteração.\n - Ler
.\n - Se
então e .\n
- Após o loop: se
então calcular 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:
.\n
- Ao ler o primeiro par
: como o código é , fazemos e .\n - O segundo par
tem código diferente de , então ignoramos para a média.\n - O terceiro par
: , .\n - Ao ler
paramos. A média será\n
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:
, .\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
.\n - Somar salários apenas quando
.\n - Contar quantos nutricionistas houve.\n
- No final, calcular
se 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()