begin process at 2010 02 10 12:45:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Suite de petits calcul (rendue de monaie)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Suite de petits calcul (rendue de monaie)

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ée 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 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 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 probleme avec des sockets [ par ratp ] Bonjours à tousJ'ai un probleme avec mon programme client serveur.Je voudrais que vous m'aidiez à créer un serveur simple et multi-clientJe voudrais f programmation en C [ par badramus ] Bonjour voici  le programme que j'ai pu faire mais ça ne marche comme je le souhaite. veuillez m'aidez a reoudre ce problème.voici le programme       Soket sous LINUX [ par diablo31170 ] Bonjour à tous le monde, comme le nom l'indique, cela va parler de soscket sous linux (en C++). Il aut savoir que je travaille en mode connecté. Je ch


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales