pkmnlio
Messages postés28Date d'inscriptionlundi 24 octobre 2005StatutMembreDernière intervention30 décembre 2007
-
19 déc. 2005 à 17:15
pkmnlio
Messages postés28Date d'inscriptionlundi 24 octobre 2005StatutMembreDernière intervention30 décembre 2007
-
19 déc. 2005 à 21:07
bonjour,
je dois faire un programme qui calcule le nombre de billet et de piece necessaire pour faire une somme, je l'avait fini et je croyai kil fonctionnais mais en le testant une derniere fois, j'ai vus qu'il ne prenait pas en compte les nombres tel 0.01
J'aimerai savoir si il y a une solution ?
Je dois rendre mon programme demain a 14h00
Voici le code de mon programme :
#include <stdio.h>
#include <conio.h>
main ()
{
float s=0.00; //Introduction De La Variable s Pour La Somme A Calculer
int b500=0, b200=0, b100=0, b50=0, b20=0, b5=0, p2=0, p1=0, p05=0, p02=0, p01=0, p005=0, p002=0, p001=0; //Introduction Des Variables De Chaque Type De Billet Et Pièce
printf("Calculateur du nombre de billets et de pieces necessaire\n\n");
printf("Introduisez une somme d'argent au format xx.xx : ");
scanf("%f",&s);
while(s>0)
{
if (s-500>=0)
{
b500++;
s=s-500;
}
else
{
if (s-200>=0)
{
b200++;
s=s-200;
}
else
{
if (s-100>=0)
{
b100++;
s=s-100;
}
else
{
if (s-50>=0)
{
b50++;
s=s-50;
}
else
{
if (s-20>=0)
{
b20++;
s=s-20;
}
else
{
if (s-5>=0)
{
b5++;
s=s-5;
}
else
{
if (s-2>=0)
{
p2++;
s=s-2;
}
else
{
if (s-1>=0)
{
p1++;
s=s-1;
}
else
{
if (s-0.5>=0)
{
p05++;
s=s-0.5;
}
else
{
if (s-0.2>=0)
{
p02++;
s=s-0.2;
}
else
{
if (s-0.1>=0)
{
p01++;
s=s-0.1;
}
else
{
if (s-0.05>=0)
{
p005++;
s=s-0.05;
}
else
{
if (s-0.02>=0)
{
p002++;
s=s-0.02;
}
else
{
if (s-0.01>=0)
{
p001++;
s=s-0.01;
}
else
{
s=0;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
printf("Pour cette somme, il vous faut : \n%d billet de 500 \n%d billet de 200 \n%d billet de 100 \n%d billet de 50 \n%d billet de 20 \n%d billet de 5 \n%d piece de 2 \n%d piece de 1 \n%d piece de 50 cents \n%d piece de 20 cents \n%d piece de 10 cents \n%d piece de 5 cents \n%d piece de 2 cents \n%d piece de 1 cents",b500,b200,b100,b50,b20,b5,p2,p1,p05,p02,p01,p005,p002,p001);
getch();
}
pkmnlio
Messages postés28Date d'inscriptionlundi 24 octobre 2005StatutMembreDernière intervention30 décembre 2007 19 déc. 2005 à 17:29
et bien normalement si je tape comme somme 0.01
il devrait me dire qu'il me faut 1 piece de 1 cents mais il ne le fait pas
pareil si je tape 0.03, il me dis qu'il me faut 1 piece de 2 cent mais 0 piece de 1 cent
pkmnlio
Messages postés28Date d'inscriptionlundi 24 octobre 2005StatutMembreDernière intervention30 décembre 2007 19 déc. 2005 à 17:35
oui mais cela ne change rien, ce qui est bizarre par contre c'est que par exemple si je tape 2.48 il me dis qu'il faut 1 piece de 2, 2 piece de 0.20, 1 piece de 0.05, 1 de 0.02 et 1 de 0.01
je ne comprend rien a cela, on dirai qu'il le prend 1 fois de temp en temp, j'ai essayer en vidant la memoire clavier mais rien
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 19 déc. 2005 à 18:56
Quelque questions plus bas dans le forum il y a une réponse au sujet des float :
ce n'est qu'une approximation des nombres décimaux et du coup ca pose des pb pour les soustractions et comparaisons l'approximation est de pire en pire à chaque fois)
Solutions :
- utiliser des double (%lf) : améliore mais ne résout pas forcément le pb.
- raisonner sur un prix directement en centimes => tu bosses uniquement avec des entiers (nécessite de modifier un peu la fct de demande du prix).
Sinon utilise les if ... else if ... else pour la lisibilité
if (s-500>=0)
{
b500++;
s=s-500;
}
else if (s-200>=0)
{
b200++;
s=s-200;
}else if
....
pkmnlio
Messages postés28Date d'inscriptionlundi 24 octobre 2005StatutMembreDernière intervention30 décembre 2007 19 déc. 2005 à 19:59
En tout cas merci pour l'idee de la mise en page sa a reduis la taille de mon code.
L'autre solution ne me semble pas possible , vus que c'est un exercice et mon prof ne risque pas d'etre d'accord