No Brasil existem as moedas e 1, 5, 10, 25 e 50 centavos, e notas de 1, 2, 5, 10, 20, 50, 100
reais (desconsiderando a moeda de 1 real). Faça um programa que dado um valor em reais, mostre a menor
combinação de notas e moedas existente para esse valor.
EX: R$18,67 1 nota de 10reais, 1 nota de 5reais, 1 nota de 2reais, 1nota de 1real, 1 moeda de 50centavos, 1
moeda de 10 centavos, 1 moeda de 5 centavos, 2 moedas de 1 centavo.
Código em java. Se puder, colocar da forma mais simples.(BEM SIMPLES)
obg
)
Soluções para a tarefa
Respondido por
1
O problema dessa sua abordagem é que, por exemplo, uma variável float que possui um valor 0.1, não possui exatamente 0.1, o valor real seria 0.1000001.
Então o que você poderia fazer era pegar a parte inteira do número, converter para a quantidade de cédulas do mesmo jeito que você está fazendo e pegar a parte fracionária, multiplicá-la por 100 e usá-la como uma variável do tipo inteiro para pegar a quantidade de moedas.
Segue a alteração que eu fiz no código para facilitar o entendimento.
#include <stdlib.h>
#include <conio.h>
int main()
{
float Dinheiro=0;
int r1=0,r2=0,r5=0,r10=0,r20=0,r50=0,r100=0,c1=0,c5=0,c10=0,c25=0,c50=0;
printf("\n Digite o Valor: ");
scanf("%f",&Dinheiro);
// Pega a parte inteira do valor
int parteInteira = (int) Dinheiro;
/* Pega a parte fracionária e multiplica por 100
* porque só existem 2 casas decimais para os centavos
*/
int parteFracionaria = (Dinheiro - parteInteira) * 100;
// Loop para converter a parte inteira em cédulas
do
{
if(parteInteira>=100)
{
parteInteira-=100;
r100++;
}
else if(parteInteira>=50)
{
parteInteira-=50;
r50++;
}
else if(parteInteira>=20)
{
parteInteira-=20;
r20++;
}
else if(parteInteira>=10)
{
parteInteira-=10;
r10++;
}
else if(parteInteira>=5)
{
parteInteira-=5;
r5++;
}
else if(parteInteira>=1)
{
parteInteira-=1;
r1++;
}
}while(parteInteira!=0);
// Loop para converter a parte fracionária em centavos
do
{
if(parteFracionaria>=50)
{
parteFracionaria-=50;
c50++;
}
else if(parteFracionaria>=25)
{
parteFracionaria-=20;
c25++;
}
else if(parteFracionaria>=10)
{
parteFracionaria-=10;
c10++;
}
else if(parteFracionaria>=5)
{
parteFracionaria-=5;
c5++;
}
else if(parteFracionaria>=1)
{
parteFracionaria-=1;
c1++;
}
}while(parteFracionaria!=0);
printf("\n %d nota(s) de 100 Reais.",r100);
printf("\n %d nota(s) de 50 Reais.",r50);
printf("\n %d nota(s) de 20 Reais.",r20);
printf("\n %d nota(s) de 10 Reais.",r10);
printf("\n %d nota(s) de 5 Reais.",r5);
printf("\n %d nota(s) de 1 Reais.",r1);
printf("\n %d moeda(s) de 50 Centavos.",c50);
printf("\n %d moeda(s) de 25 Centavos.",c25);
printf("\n %d moeda(s) de 10 Centavos.",c10);
printf("\n %d moeda(s) de 05 Centavos.",c5);
printf("\n %d moeda(s) de 01 Centavos.",c1);
getch();
return 0;
}
Perguntas interessantes
História,
10 meses atrás
Informática,
10 meses atrás
Geografia,
10 meses atrás
Filosofia,
1 ano atrás
Matemática,
1 ano atrás
Química,
1 ano atrás
Matemática,
1 ano atrás