Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Suite de petits calcul (rendue de monaie) [ Divers / Débutant(e) ] (nem02004)

samedi 11 novembre 2006 à 06:27:46 | Suite de petits calcul (rendue de monaie)

nem02004

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.
   
   
    /* On fait pareil pour tout les autre billets/pieces */
    while (billet200 * 200 <= rendre) { billet200++; } billet200--; rendre = rendre - billet200 * 200;
    while (billet100 * 100 <= rendre) { billet100++; } billet100--; rendre = rendre - billet100 * 100;
    while (billet50 * 50 <= rendre) { billet50++; } billet50--; rendre = rendre - billet50 * 50;
    while (billet20 * 20 <= rendre) { billet20++; } billet20--; rendre = rendre - billet20 * 20;
    while (billet10 * 10 <= rendre) { billet10++; } billet10--; rendre = rendre - billet10 * 10;
    while (billet5 * 5 <= rendre) { billet5++; } billet5--; rendre = rendre - billet5 * 5;
    while (piece2 * 2 <= rendre) { piece2++; } piece2--; rendre = rendre - piece2 * 2;
    while (piece1 * 1 <= rendre) { piece1++; } piece1--; rendre = rendre - piece1 * 1;
    while (piece050 * 0.50 <= rendre) { piece050++; } piece050--; rendre = rendre - piece050 * 0.50;
    while (piece020 * 0.20 <= rendre) { piece020++; } piece020--; rendre = rendre - piece020 * 0.20;
    while (piece010 * 0.10 <= rendre) { piece010++; } piece010--; rendre = rendre - piece010 * 0.10;
    while (piece005 * 0.05 <= rendre) { piece005++; } piece005--; rendre = rendre - piece005 * 0.05;
    while (piece002 * 0.02 <= rendre) { piece002++; } piece002--; rendre = rendre - piece002 * 0.02;
    while (piece001 * 0.01 <= rendre) { piece001++; } piece001--; rendre = rendre - piece001 * 0.01;

    /* 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");
   
    system("PAUSE"); 
    return 0;
}


samedi 11 novembre 2006 à 08:57:05 | Re : Suite de petits calcul (rendue de monaie)

Pole4

Réponse acceptée !
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.

Pole.

samedi 11 novembre 2006 à 13:21:36 | Re : Suite de petits calcul (rendue de monaie)

Arnaud16022

Membre Club
lâche ces float.
Multiplie toutes tes sommes par 100 et compte en centimes ( càd des int -> pas de perte de précision )
Utilise des tableau plutôt que des if / if / if

Ton prog sera plus stable, plus rapide, plus facile à maintenir.

_______________________
Omnia vincit labor improbus



Cette discussion est classé dans : printf, client, rendre, donne, euros


Répondre à ce message

Sujets en rapport avec ce message

Question de "graphisme" [ par did2604 ] (Re)Bonsoir :-))Encore une p'tite question avant d'aller faire dodo :je veux faire un joli dessin en C avec des printf qui me donne ceci :printf ("\n\ regardez ma source HELP [ par asnow ] BonjourJe debute en C. j'ai voulu apprendre à enregistrer des données dans un fichier, ca a donné ce code .Si vous pouviez me donner des recommandatio probleme avec switch [ par Oruk ] Bonjour à tous Je suis debutant en c++.Je viens de fabrique un petit prog pour choisir entre la convertion des euros en francs ou des francs en euros convertisseur euros / francs [ par jultoys ] Salut,je début en programmation C, j'aimerais réaliser un convertisseur Euros / francs mais j'ai un soucis...En fait ca fonctionne mais quand j'ecris Monnaie que doit rendre un caissier [ par genidou ] voila ce que je dois faire: Écrire un programme capable de calculer le nombre de billets minimal par un caissier lors d'un retrait d'argent d'un clie THREAD BLOQUE [ par lillie69 ] Bonjour, nous sommes en train de coder un jeu en réseau(pour 2 joueurs) et notre problème est qu'on voudrait qu'une fois que le 1er joueur ait joué il Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C] [ par matad0r ] Bonjour, bonjour!J'ai récemment créé une petite application client/serveur de rien du tout (je suis débutant), en m'aidant de ça : http://c.developpez Choisir un mot au hasard dans un .txt [ par chounardinio ] Bonjour à tous, J'ai suivi un tutoriel pour créer mon tout premier jeu en C/C++ .Je suis en seconde ISI et j'ai choisit de montrer mon jeu comme exp Pointeurs [ par rourou2030 ] Salut à tous,j'ai des lacunes concernants les pointeurs.En fait voici mon problème:Soitunsigned char *dataunsigned char *bufferest ce que l'appelle   [Débutant] Déplacer tous les fichiers d'un répertoire A ver B, pb avec rename() [ par evenkil ] Bonjour à tous.L'objectif de mon programme est :- lister à l'écran tous les fichiers contenu dans un repertoire A- transférer tous les fichier du répe


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.