Algo Caisse de magasin ! - Algo - Programmation
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 > Σ 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.
Marsh Posté le 22-11-2004 à 23:58:16
tain j'arrive pas à copier coller des caractères "spéciaux" comme le sigma majuscule
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.
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);
}
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