O Victor Harada já colocou esta questão em outro tópico, e o Rodrigo Flores já respondeu, mas acho que vale a pena aprofundar a análise. A resposta do Rodrigo foi: "Pelo enunciado, ela só efetua a venda se tiver troco. A venda então só é concretizada quando o usuário aperta o troco."
Agora, veja estas linhas da Figura 2 do enunciado:
[a] venda de Toblerini (preço: 320, saldo do usuario: 180)
[b] venda de Mineralba (preço: 120, saldo do usuario: 60)
A pegadinha é que as linhas [a] e [b] não podem ser exibidas imediatamente após as entradas correspondentes (-3 para Toblerini, -2 para Mineralba). No momento do pedido de Toblerini, a máquina não consegue garantir o troco (não há moedas de 10 ou 5 em quantidade suficiente para completar 180). Mas quando o usuário pede a Mineralba, o troco devido cai para 60, e então as vendas podem ser feitas. Ou seja, as linhas [a] e [b] só podem ser geradas depois que o usuário digita -5.
Se a verificação do troco disponível fosse realizada no momento da entrada do pedido, a venda de Toblerini não poderia ser feita pois naquele momento não seria possível dar 180 de troco.
Outro exemplo:
[c] venda de Xiritos (preço: 240) nao efetuada por falta de troco
Neste caso a máquina poderia até determinar imediatamente que não tem troco (o saldo é 10, mas não há mais moedas de 10 ou 5 no caixa, e nenhum produto com preço igual ou menor que 10). Porém, para que o comportamento seja consistente com o caso [a], a mensagem [c] não será exibida quando o usuário digitar -4 (Xiritos), mas somente quando ele entrar -5 (troco).
Resumindo, o usuário não recebe nenhum feedback sobre as vendas antes de pedir o troco.
Rodrigo, está correto este entendimento?
--
Luciano
Em resposta à Luciano Ramalho
Re: EP1: Quando as vendas são realmente efetuadas
Está correto sim.
O programa deve receber tudo que o usuário quer, e aí quando o usuário pede o troco ele avalia se a venda pode ou não pode ser feita. Ele pode até imprimir o pedido do usuário e os saldos parciais, mas aí seria bom se imprimisse algo quando a venda não pudesse ser concretizada.
O programa deve receber tudo que o usuário quer, e aí quando o usuário pede o troco ele avalia se a venda pode ou não pode ser feita. Ele pode até imprimir o pedido do usuário e os saldos parciais, mas aí seria bom se imprimisse algo quando a venda não pudesse ser concretizada.
Em resposta à Luciano Ramalho
Re: EP1: Quando as vendas são realmente efetuadas
por Francisco Reverbel -
A "pegadinha" que o Luciano mencionou não foi proposital, foi erro no enunciado mesmo! A minha intenção era que houvesse troco suficiente para a venda de Toblerini (linha [a] da mensagem do Luciano) ser efetuada imediatamente, mas eu acabei me esquecendo de acertar as quantidades iniciais de moedas para que isso pudesse acontecer. Bastaria aumentar de 0 para 1 a quantidade inicial de moedas de 5 centavos. (Se a máquina possuísse uma moeda de 5 centavos então ela poderia completar os 180 centavos e garantir o troco para a venda do Toblerini.)
Vou fazer a correçao no enunciado. Desculpem a confusão.
Reverbel
Vou fazer a correçao no enunciado. Desculpem a confusão.
Reverbel
Em resposta à Francisco Reverbel
Re: EP1: Quando as vendas são realmente efetuadas
por Luciano Ramalho -
Legal, professor Reverbel e Rodrigo.
Grato pela atenção.
--
Luciano
Grato pela atenção.
--
Luciano
Em resposta à Luciano Ramalho
Re: EP1: Quando as vendas são realmente efetuadas
por Francisco Reverbel -
Eu é que agradeço a você e ao Rodrigo por terem chamado a minha atenção para o erro no enunciado.
O enunciado já foi corrigido. Esta mensagem descreve a correção.
Reverbel
O enunciado já foi corrigido. Esta mensagem descreve a correção.
Reverbel