Escreva um programa para controlar uma pequena máquina registradora e fornecer a forma de pagamento do valor calculado para cada compra efetuada.
Você deve solicitar ao usuário que digite o código do produto e a quantidade comprada.
Utilize a tabela de códigos abaixo para obter o preço de cada produto:
Código Preço
1 0,50
2 1,00
3 4,00
5 7,00
9 8,00
Seu programa deve exibir o valor total de cada compra depois que o usuário digitar código 0 (zero).
Qualquer outro código não listado na tabela, deve gerar a mensagem de erro Código inválido.
Após obtido o valor total da compra, imprima a quantidade de cédulas necessárias para pagar esse mesmo valor. Para simplificar, vamos trabalhar apenas com valores inteiros e com cédulas de R 50, R 20, R$ 10, R$ 5 e R$ 1.
Importante:
A tabela deve ser apresentada ao usuário para que ele possa digitar os códigos da compra.
A quantidade de usuários que farão a compra é indeterminada, emita uma mensagem verificando se ele deseja continuar as compras.

Passo 1

Beleza, o problema é esse: a gente precisa criar um “caixa” que mostre uma tabela de códigos/produtos, peça pro cliente digitar código e quantidade até ele digitar 0, some o total da compra (se o código não existir, dispara “Código inválido”), e depois informe quantas cédulas de R$50, R$20, R$10, R$5 e R$1 são necessárias para pagar tudo. Também, depois de fechar uma compra, pergunta se ele quer começar outra.
Conteúdo usado: estruturas de repetição (while), seleção (if/else), dicionário pra guardar preço, acumulação de total e o algoritmo guloso para decompor valor em cédulas.

Passo 2

Primeiro, a gente monta a tabela de preços em um dicionário (ou array associativo). Em Python, por exemplo:
precos = {
    1: 0.50,
    2: 1.00,
    3: 4.00,
    5: 7.00,
    9: 8.00
}
Isso facilita pegar o preço de cada código com precos[codigo]. Se o código não existir no dicionário, é inválido.

Passo 3

Agora, vamos controlar várias compras. Usamos um laço externo que pergunta “Deseja iniciar compra? (s/n)”. Se responder ‘s’, criamos total = 0.0 e entramos em outro while para ler os itens:
  • Peça codigo = int(input("Código (0 p/ encerrar): ")).
  • Se codigo == 0, damos break e vamos calcular o total.
  • Se codigo não estiver em precos, mostramos "Código inválido" e voltamos pra pedir o próximo código.
  • Senão, pedimos qtd = int(input("Quantidade comprada: ")), e fazemos total = total + precos[codigo] times qtd
    Isso vai acumulando o valor.

Passo 4

Quando o cliente digita 0, a gente sai do loop de itens e exibe:
print(f"Valor total da compra: R$\{total:.2f\}")
Como queremos trabalhar só com valores inteiros pra usar cédulas, vamos converter:
valor_inteiro = int(round(total))
(Arredondamos para o inteiro mais próximo.)
Agora aplicamos o algoritmo guloso:
cedulas = [50, 20, 10, 5, 1]
resto = valor_inteiro
for c in cedulas:
    n = resto // c
    resto = resto - n*c
    print(f"{n} cédula(s) de R${c}")
Isso dá quantas notas de cada valor cabem no total.

Passo 5

Depois de mostrar as cédulas, voltamos ao laço externo e perguntamos de novo "Quer fazer outra compra? (s/n)". Se for ‘s’, repete tudo desde o passo 3. Se for ‘n’, imprimimos "Obrigado e até a próxima!" e encerramos.

Resposta

Segue o pseudocódigo completo (estrutura em Python) resumido:
precos = {1:0.50, 2:1.00, 3:4.00, 5:7.00, 9:8.00}

while True:
    resp = input("Iniciar nova compra? (s/n): ")
    if resp.lower() != 's':
        print("Obrigado e até a próxima!")
        break

    total = 0.0
    print("Tabela de preços:", precos)
    while True:
        codigo = int(input("Código (0 encerra): "))
        if codigo == 0:
            break
        if codigo not in precos:
            print("Código inválido")
            continue
        qtd = int(input("Quantidade comprada: "))
        total += precos[codigo] * qtd

    print(f"Valor total: R${total:.2f}")
    valor_int = int(round(total))
    print("Cédulas necessárias:")
    for c in [50,20,10,5,1]:
        n = valor_int // c
        valor_int -= n*c
        print(f"{n} x R${c}")
Isso resolve o enunciado direitinho!

Exercícios relacionados