Algo Caisse de magasin !

Algo Caisse de magasin ! - Algo - Programmation

Marsh Posté le 22-11-2004 à 17:28:02    

Bonjour  
J'ai presque fini un programme d'algo concernant une caisse de supermarché mais j'ai un petit probleme conçernant la monnaie à rendre. Je dois calculer celle-ci selon la disponibilité de la caisse.  
Lorsque le client donne l'argent, je l'ajoute immediatement à la caisse et ensuite je rend la monnaie.
Au début du programme je demande à l'utilisateur de mettre la composition en caisse. Ensuite je demande quelle est la valeur de l'achat et combien donne le client (la composition)  
J'ai utilisé ce-ci mais je crois pas que cela fonctionne :  
Merci d'avance  
 
Nb100; Nb50 étant le nombre de billet dispo en caisse  
Rend100; Rend50 est le nombre de billets à rendre  
Monnaie:=SommeDonnee-MontantAchat;  
 
{BILLET DE 100 EURO}  
 
while (Monnaie>=100) and (nb100>=1) do  
begin  
nb100:=nb100-1; {suppression d un billet de 100euro dans la disponibilités}  
Monnaie:=Monnaie-100; {suppression de 100euro de la somme donnée}  
rend100:=rend100+1; {incrémentation pour savoir le nombre de billet(s) de 100euro a rendre}  
end;  
 
{BILET DE 50 EURO}  
 
while (Monnaie>=50) and (nb50>=1) do  
begin  
nb50:=nb50-1; {suppression d un billet de 50euro dans la disponibilités}  
Monnaie:=Monnaie-50; {suppression de 50euro de la somme donnée}  
rend50:=rend50+1; {incrémentation pour savoir le nombre de billet(s) de 50euro a rendre}  
end;  
 
 
.........jusqu'à 1 euro  

Reply

Marsh Posté le 22-11-2004 à 17:28:02   

Reply

Marsh Posté le 22-11-2004 à 20:29:20    

bein les valeurs des billets et pièces de monnaies sont (presque) toujours  des suites super croissantes, à savoir que:
si Vn est la suite des valeurs de billets et pièces dans l'ordre croissant, Vn > &#931; Vi (1<=i<n).
 
Dans le cas d'une suite super croissante, il n'existe qu'une seule décomposition canonique donc oui, ton algo est bon, à ceci près qu'il pourrait prendre en paramètre la liste super croissante elle même au lieur de coder en dur une boucle pour chaque billet ou pièce.


Message édité par schnapsmann le 22-11-2004 à 23:59:07
Reply

Marsh Posté le 22-11-2004 à 22:24:59    

&#931; [:autobot]

Reply

Marsh Posté le 22-11-2004 à 23:58:16    


tain j'arrive pas à copier coller des caractères "spéciaux" comme le sigma majuscule  :sarcastic:

Reply

Marsh Posté le 23-11-2004 à 00:00:42    


 
le compte est bon

Reply

Marsh Posté le 23-11-2004 à 18:40:28    

Pourtant il me rend trop de monnaie par moment :s
 
Un mec sur un autre forum proposé ça (j'ai pas tellement compris..)
 
Sur le principe, ca va rendre la monnaie mais ne va absolument  
pas gerer la disponibilite de tel ou tel coupures. Si tu as 4 billets  
de 100 dans ta caisse et 40 de 50, que tu doit rendre 350.- a un  
client la logique voudrait que tu lui rende 7 billets de 50, ton  
programme va lui rendre 3 billets de 100 et un de 50. Ton programme  
devrait tester les variables nb100 et nb50, et en fonction de la  
difference ne rendre que des billets proportionellement, dans le cas  
de figure precedent, si tu fait un ratio en nb50 ou nb100, tu obtient  
soit 40/4 ou 4/40 => resultat 10 ou .1. Cette valeure dans les  
deux cas t'indique une grosse disproportion des billets. ton  
programme pourrait alors calculer le nombre de billets de 50  
theorique qui seraient necessaires pour arriver a la somme, et  
si ce nombre est inferieur au facteur de ration tu rends  
directement que des 50. Si tu affine un minimum le systeme cela  
devrait repondre a ton besoin.

Reply

Marsh Posté le 28-11-2004 à 13:18:46    

Si ça peut t'aider =>
(c'est en C et très moche car c'est un des premiers programmes que j'ai du faire ^^)
 
#include <stdio.h>
 
main () /* Rendre monaie 14/10/2004, Kalimuxo */
        /* Variables */
 {  
     int e5, e2, e1, c50, c20, c10, c1, prix, verse, rendre, a;
     
          /* Entrées */
     
     printf("Entrez le prix a payer en centime d'euro :\n" );
     scanf("%d",&prix);
     
     printf("Entrez la somme versee en centimes d'euro :\n" );
     scanf("%d",&verse);
     
     rendre = verse- prix;
     
          /* Calculs */
     
     e5=rendre/500;
     a=rendre%500;
     
     e2=a/200;
     a=a%200;
     
     e1=a/100;
     a=a%100;
     
     c50=a/50;
     a=a%50;
     
     c20=a/20;
     a=a%20;
     
     c10=a/10;  
     a=a%10;
     
     c1=a;
 
          /* Traitement et sorties */
           
     printf("Il faut rendre ...\n " );
     
      if (e5>1) printf("%d billets de 5 euros \n",e5);  
      if (e5==1)  printf(" %d billet de 5 euros\n ",e5);  
       
       if (e2>1) printf("%d pieces de 2 euros \n",e2);  
       if (e2==1) printf("%d piece de 2 euros \n",e2);    
           
         if (e1>1) printf("%d pieces de 1 euro\n ",e1);  
         if (e1==1) printf("%d piece de 1 euro\n ",e1);  
             
          if (c50>1) printf("%d pieces de 0.5 euro\n",c50);    
          if (c50==1) printf("%d piece de 0.5 euro\n",c50);  
           
           if (c20>1) printf("%d pieces de 0.2 euro\n",c20);    
           if (c20==1) printf("%d piece de 0.2 euro\n",c20);  
           
            if (c10>1) printf("%d pieces de 0.1 euro\n",c10);  
            if (c10==1) printf("%d piece de 0.1 euro\n",c10);  
             
             if (c1>1) printf("%d pieces de 1 centime d'euro\n",c1);      
             if (c1==1) printf("%d piece de 1 centime d'euro\n",c1);      
               
               
               /* Fin du programme */
   
       scanf("%d",&a);
     
     
     
 }    

Reply

Sujets relatifs:

Leave a Replay

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