nem02004
Messages postés47Date d'inscriptionvendredi 21 mai 2004StatutMembreDernière intervention23 avril 2007
-
11 nov. 2006 à 06:27
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 2010
-
11 nov. 2006 à 13:21
Alors voila, je désire faire un petit programme qui m'indique la monaie à rendre aux clients,
pour cela j'entre lr prix de l'article, j'entre le montant que le client me donne.
Le programme doit m'indiquer la monaie que je puisse rendre au client ( le plus de grosse somme possible ).
Exemple:
le prix: 5
le montant donné: 20
je doit rendre: 1 billet de 10, et 1 billet de 5
Alors les calculs ont l'air de bien marché, cependant, si je met par exemple:
prix: 5.24
montant: 5008.68
Il m'affiche:
Le prix de l'article: 5.240000 euros (comment ne pas avoir tout les 0 inutiles ?)
Le montant donné: 5008.680176(d'ou sort ce 0176 ?? )
M'erci d'avance pour la réponse à ces 2 questions, et aux bon conseils que vous me donnerez pour améliorer/optimiser le programme.
Voila le programme que j'ai fait:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float prix,donne,rendre;
printf("Quel est le prix de la marchandise ? "); scanf("%f", &prix); //L'utilisateur entre le prix de la marchandise
printf("\nCombien donne l'acheteur ? "); scanf("%f", &donne); //Il entre la somme que le client lui donne
rendre=donne-prix; //On stock dans la variable 'rendre' la somme à rendre (somme donnée - prix)
printf("\n\nLa marchandise coute %f euros",prix);
printf("\nIl nous donne %f euros",donne);
printf("\n\nOn doit lui rendre %f euros",rendre);
/* On déclare les variables qui correspondent au nombre de billet/pieces de X somme que loin doit rendre */
int billet500=0; int billet200=0; int billet100=0; int billet50=0; int billet20=0; int billet10=0; int billet5=0;
int piece2=0; int piece1=0; int piece050=0; int piece020=0; int piece010=0; int piece005=0; int piece002=0; int piece001=0;
/* on calcul le nombre maximum de billets de 500 euros que l'on peut rendre en ne rendant pas plus que prévu */
while (billet500 * 500 <= rendre) { billet500++; }
billet500--;
rendre = rendre - billet500 * 500; //On met a jour la variable 'rendre' avec la nouvelle somme à rendre.
/* Si le nombre de billets de 500 à distribué n'est pas nulle, on affiche le nombre de billets à rendre */
if (billet500 >= 1) { printf("\n\nOn donne au client %d billets de 500 euros. (soit: %d euros)",billet500,billet500 * 500); }
/* On fait pareil pour tout les autre billets/pieces */
if (billet200 >= 1) { printf("\nOn donne au client %d billets de 200 euros. (soit: %d euros)",billet200,billet200 * 200); }
if (billet100 >= 1) { printf("\nOn donne au client %d billets de 100 euros. (soit: %d euros)",billet100,billet100 * 100); }
if (billet50 >= 1) { printf("\nOn donne au client %d billets de 50 euros. (soit: %d euros)",billet50,billet50 * 50); }
if (billet20 >= 1) { printf("\nOn donne au client %d billets de 20 euros. (soit: %d euros)",billet20,billet20 * 20); }
if (billet10 >= 1) { printf("\nOn donne au client %d billets de 10 euros. (soit: %d euros)",billet10,billet10 * 10); }
if (billet5 >= 1) { printf("\nOn donne au client %d billets de 5 euros. (soit: %d euros)",billet5,billet5 * 5); }
if (piece2 >= 1) { printf("\nOn donne au client %d pieces de 2 euros. (soit: %d euros)",piece2,piece2 * 2); }
if (piece1 >= 1) { printf("\nOn donne au client %d pieces de 1 euro. (soit: %d euros)",piece1,piece1 * 1); }
if (piece050 >= 1) { printf("\nOn donne au client %d pieces de 50 centimes. (soit: %f euros)",piece050,piece050 * 0.50); }
if (piece020 >= 1) { printf("\nOn donne au client %d pieces de 20 centimes. (soit: %f euros)",piece020,piece020 * 0.20); }
if (piece010 >= 1) { printf("\nOn donne au client %d pieces de 10 centimes. (soit: %f euros)",piece010,piece010 * 0.10); }
if (piece005 >= 1) { printf("\nOn donne au client %d pieces de 5 centimes. (soit: %f euros)",piece005,piece005 * 0.05); }
if (piece002 >= 1) { printf("\nOn donne au client %d pieces de 2 centimes. (soit: %f euros)",piece002,piece002 * 0.02); }
if (piece001 >= 1) { printf("\nOn donne au client %d pieces de 1 centime. (soit: %f euros)",piece001,piece001 * 0.01); }
printf("\n\n\n");
Pole4
Messages postés20Date d'inscriptionmardi 11 octobre 2005StatutMembreDernière intervention13 mars 2007 11 nov. 2006 à 08:57
Si tu veux que 2 décimales, il faut mettre %.2f dans le printf.
Pour ce débarraser du 0176,il faut passer en double. L'ordinateur ne calcule pas en base 10 mais en base 2 et comme 5008.68 ne s'écrit pas exactment en base 2, il y a des erreurs de conversion. Il faut donc augmenter la précision pour diminuer ces erreurs.