Para não estar a fazer o teu trabalho de casa :-), em vez de escrever pseudo-codigo escrvi o programa (Perl):
Exemplo:
Depois disto, penso que fazes o trabalho em 5 minutos.
Código:
#!/usr/bin/perl
use strict;
use warnings;
# ------------------------------------------------------------------------------
# Pretende-se simular o funcionamento de uma maquina de venda de cafe. Admite-se
# que o custo do cafe e de 40 centimos. A maquina aceita moedas de qualquer
# valor (valido) mas so da troco em moedas de 10, 20 e 50 centimos.
# O troco deve ser calculado de forma a corresponder a menor
# quantidade possivel de moedas. Simule a maquina de cafe e indique quantas
# moedas de cada valor a maquina devera dar de troco.
# ------------------------------------------------------------------------------
my $preco_cafe = 40;
my @moedas_aceites = qw/1 2 5 10 20 50 100 200/;
my @moedas_trocos = qw/10 20 50/;
my $recebido = 0;
my $moedas_troco;
my $em_falta = $preco_cafe;
while ($recebido < $preco_cafe) {
$em_falta = ($preco_cafe - $recebido);
print "Introduza uma moeda (faltam " . $em_falta . " centimos): ";
my $introduzido;
chomp($introduzido = <>);
# Se nao foi introduzida uma moeda, reiniciamos
redo if !$introduzido;
# So aceitamos inteiros
$introduzido =~s/\D/0/gmx;
# Por default nao aceitamos a moeda
my $aceita_moeda = 0;
# So aceitamos moedas validas
if (grep {$_ eq $introduzido } @moedas_aceites) {$aceita_moeda = 1}
# Se o valor recebido obrigar a troco, so aceitamos a moeda se o troco
# for convertivel na moeda pre-definida de menor valor
if ($introduzido > $preco_cafe && $aceita_moeda == 1) {
# Por default voltamos a nao aceitar a moeda
$aceita_moeda = 0;
foreach my $moeda (sort @moedas_trocos) {
if ( ($em_falta / $moeda) =~/^\d+$/ ) {
$aceita_moeda = 1;
last;
}
}
}
if ($aceita_moeda == 1) {
$recebido += $introduzido
} else {
print "Moeda nao aceite!\n";
}
}
my $troco = ($recebido - $preco_cafe);
if ( $troco > 0 ) {
# Variavel 'temporaria' para nao fazermos o reset ao valor do troco
my $temp_troco = $troco;
foreach my $moeda (sort {$b<=>$a} @moedas_trocos) {
next if $moeda > $temp_troco;
while ($temp_troco >= $moeda) {
$moedas_troco->{$moeda}++;
$temp_troco -= $moeda;
}
}
}
print "\n", "-" x 50, "\n";
print "Recebido: ", $recebido, " centimos\n";
print "A devolver: ", $troco, " centimos\n";
print " $moedas_troco->{$_} moeda(s) de $_ centimos\n"
foreach sort {$b<=>$a} keys %$moedas_troco;
Exemplo:
Código:
$ perl maquina_cafe.pl
Introduza uma moeda (faltam 40 centimos): 30
Moeda nao aceite!
Introduza uma moeda (faltam 40 centimos): 10
Introduza uma moeda (faltam 30 centimos): 2
Introduza uma moeda (faltam 28 centimos): 100
Moeda nao aceite!
Introduza uma moeda (faltam 28 centimos): 5
Introduza uma moeda (faltam 23 centimos): 2
Introduza uma moeda (faltam 21 centimos): 1
Introduza uma moeda (faltam 20 centimos): 200
--------------------------------------------------
Recebido: 220 centimos
A devolver: 180 centimos
3 moeda(s) de 50 centimos
1 moeda(s) de 20 centimos
1 moeda(s) de 10 centimos
Depois disto, penso que fazes o trabalho em 5 minutos.
Última edição: