Probleme de verification d'un nombre

pkmnlio Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 30 décembre 2007 - 19 déc. 2005 à 17:15
pkmnlio Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 30 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();
}

12 réponses

morphorpse Messages postés 40 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 8 septembre 2006 1
19 déc. 2005 à 17:27
Qu'est ce que tu entends par "il ne prend pas en compte les nombres tels que 0.01 " ??
Morphorpse
0
pkmnlio Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 30 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

j'ai beau chercher je ne trouve pas pourquoi
0
morphorpse Messages postés 40 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 8 septembre 2006 1
19 déc. 2005 à 17:31
est ce que tu as essayé, quand tu testes de ne pas regarder si c'est superieur à 0 mais supérieur à 0.01 ?

M.orphorpse
0
pkmnlio Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 30 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
morphorpse Messages postés 40 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 8 septembre 2006 1
19 déc. 2005 à 17:37
En gros ça ne marche pas quand tu passes comme valeur, une valeur inférieure à 1 ?

Morphorpse
0
pkmnlio Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 30 décembre 2007
19 déc. 2005 à 17:39
ben sa marche quand je met 0.5 ou 0.05, on dirai que cela ne marche pas quand la valeur necesite une piece de 1 cent
0
morphorpse Messages postés 40 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 8 septembre 2006 1
19 déc. 2005 à 18:19
Je t'ai deja demandé mais essaies de modififer toutes les valeurs 0 par 0,01, bien toutes meme le while

Morphorpse
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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
....
0
pkmnlio Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 30 décembre 2007
19 déc. 2005 à 19:55
j'ai essayer mais cela ne fonctionne tjrs pas
0
pkmnlio Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 30 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
0
morphorpse Messages postés 40 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 8 septembre 2006 1
19 déc. 2005 à 21:01
Et si tu multiplie la valeur avant de la tester , tu crée un seconde variable genre p001par100 et tu regarde si c egal a 1

Morphorpse
0
pkmnlio Messages postés 28 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 30 décembre 2007
19 déc. 2005 à 21:07
Je viens d'essayer c'est pareil, il ne prend toujours pas,et c'est tres bizarre, on dirai que le probleme commence a partir de p002
0
Rejoignez-nous