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.