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:
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 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.
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
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.
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
, damosbreak
e vamos calcular o total. - Se
codigo
não estiver emprecos
, mostramos"Código inválido"
e voltamos pra pedir o próximo código. - Senão, pedimos
qtd = int(input("Quantidade comprada: "))
, e fazemos
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:
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!