Programmer un mister cash

Résolu/Fermé
sikim69 Messages postés 33 Date d'inscription lundi 24 septembre 2012 Statut Membre Dernière intervention 30 mars 2013 - 15 déc. 2012 à 21:05
sikim69 Messages postés 33 Date d'inscription lundi 24 septembre 2012 Statut Membre Dernière intervention 30 mars 2013 - 16 déc. 2012 à 13:08
Bonsoir à tous ^^

Je remercie d'avance ceux qui liront la suite et qui pourront m'aider.

Je vous explique de manière claire et rapide l'ennoncer de mon programme :

Il faut simuler le fonctionnement d'un appareil de type Mister-Cash,
fonctionnant de la manière suivante :

a- Le gérant indique au départ le nombre de billets de 5€, 10€, 20€, 50€, 100€ et
200€ en caisse.
b- Un client indique la somme totale qu'il désire retirer comprise entre 5 et 500 euros et multiple de 5 !
c- Le programme évalue la meilleure décomposition possible de cette somme en billets de 5, 10, 20, 50, 100 et 200 en fonction du stock de type de billets disponibles.

En cas de pénurie de billets, il complète avec des billets de valeur inférieure. En cas
de pénurie de billets de 5€, il indique le message "nombre de billets en stock
insuffisant".
d- L'appareil affiche le message »Recevez....x 100 +...x20 + ..x 5 »



Voilà mon code :

#include<stdio.h>
#include<conio-bis.h>

int main ()
{
int b5,b10,b20,b50,b100,b200,retrait,som,cpt200;
int ok,cpt100,cpt50,cpt20,cpt10,cpt5,ok2,ok3;

    printf("____________________\n\n       GERANT\n____________________\n\n");
    textcolor(35);
    printf("Bonjour, combien de billet possedez vous dans votre caisse ?\n");
    textcolor(50);
    printf("\n\t- Combien de billets de 5 ? ");
    textcolor(WHITE);
    scanf("%d",&b5);
    textcolor(50);
    printf("\n\t- Combien de billets de 10 ? ");
    textcolor(WHITE);
    scanf("%d",&b10);
    textcolor(50);
    printf("\n\t- Combien de billet de 20 ? ");
    textcolor(WHITE);
    scanf("%d",&b20);
    textcolor(50);
    printf("\n\t- Combien de billet de 50 ? ");
    textcolor(WHITE);
    scanf("%d",&b50);
    textcolor(50);
    printf("\n\t- Combien de billet de 100 ? ");
    textcolor(WHITE);
    scanf("%d",&b100);
    textcolor(50);
    printf("\n\t- Combien de billet de 200 ? ");
    textcolor(WHITE);
    scanf("%d",&b200);
    textcolor(50);
    
    clrscr();
    
    textcolor(10);
    printf("____________________\n\n       CLIENT\n____________________\n\n");
    textcolor(35);
    printf("Bonjour,");
    
    do
    {
    printf(" combien voulez vous retirez ? ");
    textcolor(WHITE);
    scanf("%d",&retrait);
                         ok=0;
                         if((retrait<5||retrait>500)||(retrait%5!=0))
                         {
                                                   ok=1;
                                                   textcolor(RED);
                                                   printf("\n\nLa somme d'argent doit etre comprise entre 5 et 500 euros");
                         }
    } while(ok==1);
    
    clrscr();
    
    som=0, cpt200=0, cpt100=0, cpt50=0, cpt20=0, cpt10=0, cpt5=0, ok2=0, ok3=0;
    getchar();
    do
    {                       
                            som=som+200; 
                            cpt200=cpt200+1; 
                            b200=b200-1;       
    } while((som!=retrait)&&(som<=retrait)&&(b200!=0)); 
    
    if(som=retrait)
    {
                   clrscr();
                   printf("Vous recevez %d euros en : %d billets de 200",retrait,cpt200);
    } 
    else if(som>retrait)
    {
                   ok2=1;
                   som=som-200;
                   b200=b200+1;
                   cpt200=cpt200-1;
    }
    
    if(b200==0)||(ok2==1)
    {
                            do
                            {       
                                    printf("\n\n%d",cpt100);                                        
                                                    som=som+100; 
                                                    cpt100=cpt100+1; 
                                                    b100=b100-1;       
                            } while((som!=retrait)&&(som<retrait)&&(b100!=0)); 
                            
                            if(som=retrait)
                            {
                                           clrscr();
                                           printf("Vous recevez %d euros en : %d billets de 200, %d billets de 100",retrait,cpt200,cpt100);
                                           printf("\n%d",som);
                            } 
                            else if(som>retrait)
                            {
                                                som=som-100;
                                                b100=b100+1;
                                                cpt100=cpt100-1;
                            }   
    }
                   
    getchar(); getchar();
    return 0;
}
textcolor(10);


Voilà le problème pour l'instant :

Mon programme n'affiche pas le nombre de billets adequats en fonction du retrait.
Exemple : La caisse : QUE 1 billets de 100 et 2 billets de 200. Quand j'entre 400 euros, il affiche vous recevez 400 euros en : 2 billets de 200 et 1 billet de 100
Puis peu importe le retrait, je n'ai essayé qu'avec les billets de 100 et 200 pour l'instant..
Fin voilà, je ne sais pas ce qui n'est pas bon. Celui qui sait regarder et me dire ce qui cloche, ce qu'il faudrait changer, ce qu'il faudrait faire pour continuer serait gentil :)

Bonne soirée


1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 16/12/2012 à 12:57
Bonjour,
Je n'ai pas cherché à corriger le code je prefère vous donner une base sur laquelle repartir :
#include <stdio.h> 

int main(void){ 
    int somme,i; 
    int cash[2][6]={{200,100,50,20,10,5},{1,1,2,1,6,4}}; 
    somme = 410; /* on veut 410euro */ 
    for(i=0;i<6;i++){ /* six billets differents */ 
        if(cash[1][i]>0) /* si billet i dispo */ 
            while(cash[1][i]){ /* boucle sur nb de billets dispo */ 
                if(somme>=cash[0][i]){ /* si somme >= type de billet */ 
                    printf("un billet de %d\n",cash[0][i]); 
                    somme-=cash[0][i]; /* retire de la somme le billet */ 
                } else break; /* si somme < type de billet actuel, stop la boucle */ 
                cash[1][i]--; /* si billet utilisé alors décompte */ 
            } 
    } 
    return 0; 
}

Le principe est de stocker les données dans un tableau 2*6, la première ligne (en cash[0][i]) indique le type des billets soit 200 100 50 20 10 5 et la seconde ligne (en cash[1][i]) indique le nombre de billets dispo pour le type de billet, ce sont les compteurs ici initialisés à 1 1 2 1 6 4. C'est à dire : 1x200 1x100 2x50 1x20 6x10 4x5.
Bonne continuation.
1
sikim69 Messages postés 33 Date d'inscription lundi 24 septembre 2012 Statut Membre Dernière intervention 30 mars 2013 1
16 déc. 2012 à 13:08
A la base, on m'a dit de ne pas utiliser les tableaux, c'est pour cela que je ne les aies pas utilisés. Mais avec ton aide, tant que j'y suis, je vais essayé de le faire avec les tableaux puisque j'ai vu en cours comment cela fonctionne et je reviendrais vers toi une fois que j'ai essayé

Merci !
0