Trocar dinheiro é uma atividade muito comum no dia a dia das pessoas, e é importante saber como lidar com as diferentes notas e moedas para que a transação seja realizada de forma eficiente e sem problemas. Por isso, neste artigo, vamos apresentar uma solução em PHP para o problema de decomposição de um valor monetário em notas e moedas.
O problema consiste em receber um valor monetário em ponto flutuante com duas casas decimais e calcular o menor número possível de notas e moedas necessárias para representar esse valor. As notas consideradas são de 100, 50, 20, 10, 5 e 2 reais, e as moedas possíveis são de 1, 0.50, 0.25, 0.10, 0.05 e 0.01 centavos.
Para resolver esse problema, podemos utilizar a solução em PHP abaixo:
<?php
$valor = readline();
// Transforma o valor em centavos
$valor *= 100;
echo "NOTAS:\n";
// Calcula a quantidade de notas de R$ 100 necessárias
$notas100 = (int) ($valor / 10000);
echo "$notas100 nota(s) de R$ 100.00\n";
$valor = $valor % 10000;
// Calcula a quantidade de notas de R$ 50 necessárias
$notas50 = (int) ($valor / 5000);
echo "$notas50 nota(s) de R$ 50.00\n";
$valor = $valor % 5000;
// Calcula a quantidade de notas de R$ 20 necessárias
$notas20 = (int) ($valor / 2000);
echo "$notas20 nota(s) de R$ 20.00\n";
$valor = $valor % 2000;
// Calcula a quantidade de notas de R$ 10 necessárias
$notas10 = (int) ($valor / 1000);
echo "$notas10 nota(s) de R$ 10.00\n";
$valor = $valor % 1000;
echo "MOEDAS:\n";
// Calcula a quantidade de moedas de R$ 1 necessárias
$moedas1 = (int) ($valor / 100);
echo "$moedas1 moeda(s) de R$ 1.00\n";
$valor = $valor % 100;
// Calcula a quantidade de moedas de R$ 0.50 necessárias
$moedas50 = (int) ($valor / 50);
echo "$moedas50 moeda(s) de R$ 0.50\n";
$valor = $valor % 50;
// Calcula a quantidade de moedas de R$ 0.25 necessárias
$moedas25 = (int) ($valor / 25);
echo "$moedas25 moeda(s) de R$ 0.25
?>
Uma vez que sabemos como funciona o algoritmo, podemos implementá-lo em nossa linguagem de programação de escolha. Aqui, apresentaremos uma implementação em PHP.
<?php
$N = (float) readline() * 100;
echo "NOTAS:\n";
$notas = [10000, 5000, 2000, 1000, 500, 200];
foreach ($notas as $nota) {
$value = (int) ($N / $nota);
echo "$value nota(s) de R$ " . number_format($nota / 100, 2, '.', '') . "\n";
$N = $N % $nota;
}
echo "MOEDAS:\n";
$moedas = [100, 50, 25, 10, 5, 1];
foreach ($moedas as $moeda) {
$value = (int) ($N / $moeda);
echo "$value moeda(s) de R$ " . number_format($moeda / 100, 2, '.', '') . "\n";
$N = $N % $moeda;
}
Nessa implementação, usamos o readline()
para ler o valor de entrada fornecido pelo usuário. Em seguida, multiplicamos esse valor por 100 para converter para centavos, já que estamos trabalhando com notas e moedas de centavos. Em seguida, usamos um loop foreach
para iterar sobre as notas e moedas disponíveis, calculando o número de notas/moedas necessárias e imprimindo o resultado no formato solicitado.
A função number_format()
é usada para formatar o valor das notas/moedas no formato correto (por exemplo, “R$ 1.00” em vez de “R$ 100”). O terceiro argumento de number_format()
é usado para especificar o separador decimal (ponto) e o quarto argumento é usado para especificar o separador de milhares (não usado neste caso).
Por fim, o resultado é impresso na tela com o número mínimo de notas e moedas necessárias para trocar o valor fornecido pelo usuário.
Em resumo, este algoritmo é uma solução eficiente para o problema de decompor um valor monetário em notas e moedas. Ele usa um conjunto fixo de notas e moedas e itera sobre eles para determinar a quantidade mínima necessária para representar o valor dado. A implementação em PHP é relativamente simples, mas pode ser facilmente adaptada para outras linguagens de programação.