Ir para o conteúdo

Máquina de chocolates

Uma pequena diversão de quando comecei a programar em Pascal. Assim que me apanhei com conhecimentos para tal, fiz aquilo que era, na minha inocência da época, um programa bombástico.

Uma máquina de chocolate virtual, onde o chocolate custa 1,50€ (sim, eu sei, um pouco caro :-D) e se pode introduzir moedas de 10, 20, 50 e 100 cêntimos (ou 1€, no último caso).

Fica aqui a minha brincadeira da época como um exemplo de condições encadeadas dentro de um ciclo de forma a descobrir a forma de dar o troco de forma optimizada.

program maquina_chocolate;
uses crt;
var moeda,M,T:integer;
var cont:integer;
var t10,t20,t50,t100:integer;

begin
     cont:=0;
     moeda:=0;
     M:=0;
     writeln('MAQUINA DE CHOCOLATES');
     writeln('Preco do chocolate: 150 centimos');
     writeln('Introduza moeda. So aceita moedas de 10, 20, 50 centimos e 1 euro (100 centimos)!');
     writeln(' ');
     repeat
           repeat
                 if (cont>0)
                    then if (moeda=1) or (moeda=2) or (moeda=5) or (moeda=200)
                         then writeln('Moeda reconhecida mas nao aceite! Foi rejeitada! Introduza outra.')
                         else writeln('Moeda nao reconhecida! Introduza outra.');
                 readln(moeda);
                 cont:=cont+1;
           until (moeda=10) or (moeda=20) or (moeda=50) or (moeda=100);
           cont:=0;
           if moeda=10
              then M:=M+10;
           if moeda=20
              then M:=M+20;
           if moeda=50
              then M:=M+50;
           if moeda=100
              then M:=M+100;
           writeln(' ');
           writeln('Total introduzido: ',M,' centimos.');
           if M<150
              then writeln('Faltam ',150-M,' centimos.');
     until (M>=150);
     writeln(' ');
     if M>150
        then begin
             T:=M-150;
             writeln('Troco a dar: ',T,' centimos.');
             t10:=0;
             t20:=0;
             t50:=0;
             t100:=0;
             repeat
                   if (T>=100)
                      then begin
                           T:=T-100;
                           t100:=t100+1
                           end
                           else begin
                                if (T>=50)
                                   then begin
                                     T:=T-50;
                                     t50:=t50+1
                                     end
                                     else begin
                                          if (T>=20)
                                             then begin
                                               T:=T-20;
                                               t20:=t20+1
                                               end
                                               else begin
                                                    if (T>=10)
                                                       then begin
                                                         T:=T-10;
                                                         t10:=t10+1;
                                                            end
                                               end
                                     end
                           end

             until (T=0);
             if (t100>=1)
                then writeln('Foram dadas ',t100,' moedas de 1 euro (100 centimos).');
             if (t50>=1)
                then writeln('Foram dadas ',t50,' moedas de 50 centimos.');
             if (t20>=1)
                then writeln('Foram dadas ',t20,' moedas de 20 centimos.');
             if (t10>=1)
                then writeln('Foram dadas ',t10,' moedas de 10 centimos.');
             end
        else writeln('Nao ha troco a dar.');
     writeln(' ');
     writeln('Chocolate entregue. Saborei-o, e "bom-apetite"! ;D');
     readln;
end.

Código optimizado para Free Pascal.