[Pascal] problème de nombres ... ???

problème de nombres ... ??? [Pascal] - Programmation

Marsh Posté le 16-10-2001 à 17:54:41    

Salut, je débute le Pascal à l'école et on a eu un petit programme à faire : Entrer le montant en Euros et mettre combien de billets de 500 euros, 200, 100 ... ça fait.
 
voilà ce que j'ai fait :
 
program euro;
 
uses    crt;
 
var     a,b:longint;
        euros:real;
 
Begin
 
     write ('Quelle est le montant en euros ? ';);
     readln (euros);
     writeln;
 
     a := trunc(euros*100);
 
     writeln;
     writeln (a);
 
     writeln ('Pour faire ',euros:5:2,' euros, il faut :';);
     writeln;
 
     if (a/50000)>=1 then writeln (trunc(a/50000),'x un billet de 500 euros';);
     b := a mod 50000;
     if (b/20000)>=1 then writeln (trunc(b/20000),'x un billet de 200 euros';);
     a:= b mod 20000;
     if (a/10000)>=1 then writeln (trunc(a/10000),'x un billet de 100 euros';);
     b := a mod 10000;
     if (b/5000)>=1 then writeln (trunc(b/5000),'x un billet de 50 euros';);
     a:= b mod 5000;
     if (a/2000)>=1 then writeln (trunc(a/2000),'x un billet de 20 euros';);
     b := a mod 2000;
     if (b/1000)>=1 then writeln (trunc(b/1000),'x un billet de 10 euros';);
     a:= b mod 1000;
     if (a/500)>=1 then writeln (trunc(a/500),'x un billet de 5 euros';);
     b := a mod 500;
     if (b/200)>=1 then writeln (trunc(b/200),'x une piece de 2 euros';);
     a:= b mod 200;
     if (a/100)>=1 then writeln (trunc(a/100),'x une piece de 1 euro';);
     b := a mod 100;
     if (b/50)>=1 then writeln (trunc(b/50),'x une piece de 50 cents';);
     a:= b mod 50;
     if (a/20)>=1 then writeln (trunc(a/20),'x une piece de 20 cents';);
     b := a mod 20;
     if (b/10)>=1 then writeln (trunc(b/10),'x une piece de 10 cents';);
     a:= b mod 10;
     if (a/5)>=1 then writeln (trunc(a/5),'x une piece de 5 cents';);
     b := a mod 5;
     if (b/2)>=1 then writeln (trunc(b/2),'x une piece de 2 cents';);
     a := b mod 2;
     if a=1 then writeln (a,'x une piece de 1 cent';);
 
     readln;
 
End.

 
Quand je mets 100.68, ça marche.
Mais si je mets 789.68, il fait comme si c'était 789.67
 
Je ne comprends pas pourquoi ...  :??:  
 
 
Merci de votre aide.


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 16-10-2001 à 17:54:41   

Reply

Marsh Posté le 16-10-2001 à 18:48:55    

Probleme sur les nombres reels.
 
Le probleme des reels, c'est qu'ils sont pas codes exactement. Par exemple 0.05 pourrait etre 0.04999.
C'est surement ce qui arrive avec 789.68.
 
Essaye en utilisant le type Double (+precis) au lieu de Real.
 
Dans ton cas, regarde s'il existe un type Currency. C'est traite comme un entier 64 bits (donc exact) en considerant les 4 derniers chiffres comme des decimales.

Reply

Marsh Posté le 16-10-2001 à 19:44:52    

ça va j'ai trouvé !
j'ai cherché dans fonctions standards et j'ai trouvé "arrondir".
 
 
c'est pas : a := trunc(euros*100);
 
mais : a := round(euros*100);
 
 
Merci quand même.  :)


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed