Uma Vender Machine (VM) é uma máquina automatizada para venda de produtos. Considere uma VM para vender café, sucos e água com as características:
  • Cada produto é identificado pelo seu nome: “cafe”, “suco”, ou “agua”;
  • Os preços dos produtos são: \mathrm{R} \ 1,50 (café);é\mathrm{R} $1,25 (suco); e\mathrm{R} $ 1,10$ (água);
  • A VM aceita as seguintes moedas: R \ 0,50 (cinquenta centavos);R $0,25 (vinte e cinco centavos);R $ 0,10 (dez centavos); e R\ 0,05 (cinco centavos);
  • Em cada compra, devem ser sempre inseridas 3 moedas.
Implemente um programa que receba como entradas os valores de cada uma das três moedas: M1, M2 e M3 (todas de valor real); e o nome do produto desejado: nome (valor string). Em seguida ele determina o preço do produto, conforme o nome definido na entrada, e, considerando o valor total das três moedas e o preço do produto, o programa realiza uma das seguintes ações:
  1. Caso a soma das moedas seja suficiente para a compra, imprime uma mensagem ilustrando a realização da compra, calcula o troco e imprime o nome e o valor do troco;
  2. Caso contrário, uma mensagem de erro é exibida indicando a devolução das moedas.
Não é necessária qualquer validação de entrada de dados. Os valores monetários são impressos com duas casas decimais.
Sua resposta deve conter as mensagens exatamente como definidas nos exemplos de execução.

Exemplo de Execução 1:

Informe a Moeda 1: 0.50
Informe a Moeda 2: 0.50
Informe a Moeda 3: 0.50
Informe o nome do produto: suco
Retire o produto: suco
Troco: 0.25

Exemplo de Execução 2:

Informe a Moeda 1: 0.10
Informe a Moeda 2: 0.05
Informe a Moeda 3: 0.50
Informe o nome do produto: suco
ERRO: valor insuficiente!
Devolução: 0.10, 0.05, 0.50

Passo 1

O enunciado pede que se implemente um programa que:
  • Receba como entradas três moedas (M1, M2, M3), cada uma um valor real, e o nome do produto (string) — as entradas aparecem na ordem: primeiro as três moedas e depois o nome do produto.
  • Determine o preço do produto a partir do nome (os nomes possíveis são exatamente “cafe”, “suco” ou “agua”).
  • Calcule a soma das três moedas e compare com o preço do produto.
  • Se a soma for suficiente, imprima a mensagem de retirada do produto e o troco (com duas casas decimais).
  • Se a soma for insuficiente, imprima a mensagem de erro e a devolução das três moedas (na mesma ordem inserida), com duas casas decimais.
Informações dadas (valores que aparecerão no programa):
  • Preços:
    • café: \mathrm{R}\$\,1{,}50
    • suco: \mathrm{R}\$\,1{,}25
    • água: \mathrm{R}\$\,1{,}10
  • Entradas: três moedas (valores reais) e o nome do produto (string).
  • Saídas: mensagens exatamente como nos exemplos:
    • Para compra bem-sucedida:
      • Linha com: Retire o produto: <nome>
      • Linha com: Troco: <valor com duas casas decimais>
    • Para compra com valor insuficiente:
      • Linha com: ERRO: valor insuficiente!
      • Linha com: Devolução: <M1 formatado com 2 casas>, <M2 formatado>, <M3 formatado>
  • Não é necessária validação das entradas (assume-se que o nome será um dos três e as moedas são números reais).

Passo 2

Visão geral do método que vamos implementar (sem começar a calcular ainda):
  • Ler as entradas em ordem: M1, M2, M3 (cada uma convertida para número real) e depois o nome do produto.
  • Mapear o nome do produto para o seu preço (usar uma tabela/dicionário).
  • Calcular a soma total das moedas: \text{total} = M1 + M2 + M3.
  • Comparar \text{total} com o preço do produto:
    • Se \text{total} \ge \text{preço}ç: calcular o troco \text{troco} = \text{total} - \text{preço}ç e imprimir as duas linhas de saída do caso bem-sucedido.
    • Caso contrário: imprimir as duas linhas do caso de erro e devolver as moedas na mesma ordem.
  • Garantir que todos os valores monetários impressos tenham exatamente duas casas decimais (formatar corretamente).

Passo 3

Como ler as entradas e representar os números:
  • Em Python (exemplo), usar a função de leitura para exibir o prompt e capturar a entrada. Cada moeda será lida como texto e convertida para número real usando conversão para float.
  • Didática sobre conversão: ao chamar \texttt{float(input(prompt))} ocorre:
    • \texttt{input(prompt)} mostra o prompt (por exemplo, "Informe a Moeda 1: ") e retorna a string que o usuário digita.
    • \texttt{float(...)} transforma essa string em um número real (se a string representar um número válido).
  • Importante: armazenar os valores lidos em variáveis separadas (por exemplo, M1, M2, M3) porque, se devolver as moedas no caso de erro, precisamos reapresentá-las exatamente na ordem e com a formatação correta.

Passo 4

Como determinar o preço a partir do nome do produto:
  • Usar uma tabela (em Python um dicionário) que associa cada nome àquele preço:
    • \{"cafe":1{,}50,\\ "suco":1{,}25,\\ "agua":1{,}10\}.
  • Ao receber a string \texttt{nome}, obter \text{preco} = \text{tabela}[\texttt{nome}].
  • Observação didática: não faremos validação do nome porque o enunciado diz que não é necessária; assume-se que o valor informado será um dos três nomes exatos.

Passo 5

Como calcular total, comparar e calcular o troco:
  • Cálculo do total: \text{total} = M1 + M2 + M3.
  • Comparação: verificar se \text{total} \ge \text{preco}.
    • Se verdadeiro: \text{troco} = \text{total} - \text{preco}. Imprimir:
      • \texttt{Retire o produto: }\text{nome}
      • \texttt{Troco: } troco formatado com duas casas decimais.
    • Se falso: imprimir:
      • \texttt{ERRO: valor insuficiente!}
      • \texttt{Devolução: }çã valores M1, M2, M3 formatados com duas casas decimais e separados por vírgula e espaço.
  • Observação sobre precisão: como são valores monetários simples com poucas casas decimais, exibir com formatação de duas casas (por exemplo, em Python \texttt{f"{troco:.2f}"}) garante que o número apareça com exatamente duas casas decimais, como exigido.

Passo 6

Formato exato das mensagens (muito importante — tem que coincidir com os exemplos):
  • Prompts de entrada (precisam ser exatamente estes textos, incluindo acentos e espaço final):
    • "Informe a Moeda 1: "
    • "Informe a Moeda 2: "
    • "Informe a Moeda 3: "
    • "Informe o nome do produto: "
  • Saída em caso de sucesso (soma suficiente):
    • Primeira linha: “Retire o produto: <nome>”
    • Segunda linha: “Troco: <valor com duas casas>”
  • Saída em caso de fracasso (valor insuficiente):
    • Primeira linha: “ERRO: valor insuficiente!”
    • Segunda linha: “Devolução: <M1>, <M2>, <M3>” onde cada valor tem duas casas decimais, e os três são separados por ", " (vírgula e espaço), na mesma ordem em que foram inseridos.

Passo 7

Testes mentais com os exemplos (para ter certeza do comportamento):
  • Exemplo 1:
    • Entradas: M1=0{,}50, M2=0{,}50, M3=0{,}50, nome = “suco”.
    • Preço do suco = 1{,}25.
    • \text{total} = 0{,}50 + 0{,}50 + 0{,}50 = 1{,}50.
    • \text{troco} = 1{,}50 - 1{,}25 = 0{,}25.
    • Saída esperada:
      • Retire o produto: suco
      • Troco: 0.25
  • Exemplo 2:
    • Entradas: M1=0{,}10, M2=0{,}05, M3=0{,}50, nome = “suco”.
    • \text{total} = 0{,}10 + 0{,}05 + 0{,}50 = 0{,}65 que é menor que 1{,}25.
    • Saída esperada:
      • ERRO: valor insuficiente!
      • Devolução: 0.10, 0.05, 0.50

Passo 8

Observações finais antes do código:
  • Não foi feita nenhuma validação extra (por exemplo, se a moeda é um dos valores aceitos), em concordância com o enunciado.
  • O programa abaixo é um exemplo em Python que implementa exatamente os prompts e as mensagens conforme exigido. Ele formata todos os valores monetários com duas casas decimais e preserva a ordem das moedas para a devolução.

Resposta

# Programa para a Vender Machine (VM) conforme enunciado

M1 = float(input("Informe a Moeda 1: "))
M2 = float(input("Informe a Moeda 2: "))
M3 = float(input("Informe a Moeda 3: "))
nome = input("Informe o nome do produto: ")

precos = {"cafe": 1.50, "suco": 1.25, "agua": 1.10}
preco = precos[nome]

total = M1 + M2 + M3

if total >= preco:
    troco = total - preco
    print(f"Retire o produto: {nome}")
    print(f"Troco: {troco:.2f}")
else:
    print("ERRO: valor insuficiente!")
    print(f"Devolução: {M1:.2f}, {M2:.2f}, {M3:.2f}")

Exercícios relacionados