SommeClient > SommeTotale
Cette hypothèse n'est pas à conserver car elle est simple à implémenter.Fonctionnement dans la zone EURO
La monnaie en vigueur est donc l'Euro,
qui offre donc 15 valeurs différentes : de 0,01E à 500,00E
Réfléchir à ce qu'il faudrait faire pour rendre l'application internationale.Monnaie en caisse inépuisable
Cette hypothèse est peu réaliste pour un commerçant.
Néanmoins, elle pourra être retenue dans un premier temps.
Il faudra trouver une solution pour la fin du TD.SommeClient - Somme Totale <= 500
Cette hypothèse n'a en fait aucune incidence sur l'algorithme lui même,
donc il n'est pas nécessaire de la retenir
Il faut connaître :
la SommeTotale, celle dûe par le client
la SommeClient, celle versée par le clientSi il faut rendre la monnaie :
Calculer la SommeARendreRegarder dans la caisse quelle est la plus grande valeur qui peut être rendue
et déterminer la quantité
Il faut déduire de la SommeARendre le montant qui va être rendueon recommence avec la valeur suivante à rendre
et ce, jusqu'à ce qu'il n'y ait plus rien à rendre.
Données globales :
SommeTotale, SommeClient sont réels
NbValeurs est une constante entière qui vaut 15
// Nombre de pièces et billets
Caisse est un tableau [1 à NbValeurs, 1 à 2] d'entiers
// La 1ère colonne contient les valeurs
// La 2nde colonne contient le nombre à rendreFinBoucle est un booléen
ALGORITHME PRINCIPAL
début
Initialisation // autre version de l'initialisationFinBoucle <-- FAUX
REPETER
SaisirInformations (SommeTotale, SommeClient)SI (SommeClient < SommeTotale)
ALORS
Afficher "La somme versée par le client est insuffisante"
SINON
SI (SommeClient = SommeTotale)
ALORS
Afficher "Il n'y a pas de monnaie à rendre. Merci."FinBoucle <-- VRAI
SINON
TraiterInformations (SommeTotale, SommeClient)
AfficherInformationsFinBoucle <-- VRAI
FIN SI
FIN SI
JUSQU'A FinBoucle
fin
Donnée : IndexMonnaie est un entier
début
POUR IndexMonnaie <- 1 à NbValeurs FAIRE
Caisse [IndexMonnaie, 2] <-- 0
FIN POUR// La caisse contient les valeurs en CENTIMES d'EUROS
Caisse [ 1, 1] <-- 50000 // 500 Euros
Caisse [ 2, 1] <-- 20000
Caisse [ 3, 1] <-- 10000
Caisse [ 4, 1] <-- 5000
Caisse [ 5, 1] <-- 2000
Caisse [ 6, 1] <-- 1000
Caisse [ 7, 1] <-- 500
Caisse [ 8, 1] <-- 200
Caisse [ 9, 1] <-- 100
Caisse [10, 1] <-- 50
Caisse [11, 1] <-- 20
Caisse [12, 1] <-- 10
Caisse [13, 1] <-- 5
Caisse [14, 1] <-- 2
Caisse [15, 1] <-- 1 // 1 centime d'Euro
fin
Algorithme Initialisation // - longue, + complexe
Donnée : IndexMonnaie est un entier
début
POUR IndexMonnaie <- 1 à NbValeurs FAIRE
Caisse [IndexMonnaie, 1] <-- (5 DIV (((IndexMonnaie-1) MOD 3) + 1)) * 10^(4-((IndexMonnaie-1) DIV 3))
Caisse [IndexMonnaie, 2] <-- 0
FIN POUR
fin
Algorithme SaisirInformations (S : Total, Paiement sont réels)
début
Afficher "Montant à payer par le client : "
Saisir TotalAfficher "Montant versé par le client : "
Saisir Paiement
fin
Algorithme TraiterInformations (E : MontantTotal, MontantPaye sont réels)
Données : MontantARendre, IndexValeur sont entiers
// On suppose ici qu'il faut toujours rendre de la monnaie
début
MontantARendre <-- (MontantPaye - MontantTotal) * 100
// MontantARendre est un entier,
// ce qui garantit l'absence de décimales
SI (MontantARendre < 0) // On s'assure ici d'avoir un entier positif
ALORS
MontantARendre <-- 0
FIN SIPOUR IndexValeur <-- 1 à NbValeurs FAIRE
Caisse [IndexValeur, 2] <-- MontantARendre DIV Caisse [IndexValeur, 1]
MontantARendre <-- MontantARendre - Caisse [IndexValeur, 2]*Caisse [IndexValeur, 1]
FIN POUR
fin
Jeu de test de l'algorithme TraiterInformations
Valeur 1 : 0 ou 1 fois
Valeur 2 : 0, 1 ou 2 fois
Valeur 5 : 0 ou 1 fois
MontantTotal MontantPaye MontantARendre Caisse Situation 10 5,00 0,00Toutes les valeurs à 0 < 0 10 10,00 0,00Toutes les valeurs à 0 = 0 10 1009,99 999,99rendre 0 x 1, 2 x 2 et 1 x 5 10 121,11 111,11rendre 1 x 1, 0 x 2 et 0 x 5 10 232,22 222,22rendre 0 x 1, 1 x 2 et 0 x 5
Algorithme AfficherInformations
Donnée : IndexValeur est entier
début
Afficher "Il faut rendre : "POUR IndexMonnaie <-- 1 à NbValeurs FAIRE
SI (Caisse [IndexValeur, 2] <> 0)
ALORS
Afficher Caisse [IndexValeur, 2], " pièce(s) ou billet(s) de ", Caisse [IndexValeur, 1]/100, " Euro(s)"
FIN SI
FIN POURAfficher "Merci."
fin