Rendre la monnaie
Fermé
ismail
-
17 mai 2014 à 22:07
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 18 mai 2014 à 12:48
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 18 mai 2014 à 12:48
A voir également:
- Pour enregistrer ce texte au format txt sans perdre d’informations, quel codage utiliser ? l’€ est la monnaie officielle de la grèce, même sur l'île de μύκονος, à l’est d’athènes.
- Codage ascii - Guide
- Audacity enregistrer son pc - Guide
- Codage binaire - Guide
- Telecharger format factory - Télécharger - Conversion & Codecs
- Comment utiliser le chromecast sur la télé ? - Guide
2 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
18 mai 2014 à 05:06
18 mai 2014 à 05:06
Bonjour,
Une manière très simple de s'en sortir c'est de compter en centimes, cela permet de n'avoir que des nombres entiers, on évite ainsi les valeurs flottantes qui sont imprécises et plus difficiles à manipuler.
Ensuite, plutôt que de faire un gros if/else de 60 lignes pas du tout maintenables, tu peux prendre un tableau qui contient les différentes valeurs des pièces qui existent (en centimes toujours), le code devient alors très simple à écrire.
Ce qui affiche :
Une manière très simple de s'en sortir c'est de compter en centimes, cela permet de n'avoir que des nombres entiers, on évite ainsi les valeurs flottantes qui sont imprécises et plus difficiles à manipuler.
Ensuite, plutôt que de faire un gros if/else de 60 lignes pas du tout maintenables, tu peux prendre un tableau qui contient les différentes valeurs des pièces qui existent (en centimes toujours), le code devient alors très simple à écrire.
public static final int[] CENTIMES = {500, 200, 100, 50, 20, 10, 5, 2, 1}; public static int[] monnaie(int centimes) { int[] rendu = new int[CENTIMES.length]; for (int i = 0; i < CENTIMES.length; i++ ) { rendu[i] = centimes / CENTIMES[i]; centimes %= CENTIMES[i]; } return rendu; } public static void afficher(int[] rendu) { for (int i = 0; i < CENTIMES.length; i++ ) if (rendu[i] != 0) System.out.printf("%d pièces de %d centimes\n", rendu[i], CENTIMES[i]); } public static void main(String[] args) { int centimes = 4789; System.out.printf("Monnaie sur %d centimes :\n", centimes); afficher(monnaie(centimes)); }
Ce qui affiche :
Monnaie sur 4789 centimes :
9 pièces de 500 centimes
1 pièces de 200 centimes
1 pièces de 50 centimes
1 pièces de 20 centimes
1 pièces de 10 centimes
1 pièces de 5 centimes
2 pièces de 2 centimes
Utilisateur anonyme
17 mai 2014 à 23:16
17 mai 2014 à 23:16
j'aurais plutot fait un boucle dans ce genre (bon c'est tout moche , flemme de le mettre en forme)
a chaque parcours de la boucle tu donne une pièce , jusqu'a ce que la monnaie restante a donner soit égale a 0
ca simplifie beaucoup ^^
while (monnaie restante a donner(apppelé reste plus loin) >0) loop
if reste>=5 => donner une pièce de 5
else if reste>=2 => donen une pièce de 2
... pour les autres pièces
end if
end loop
a chaque parcours de la boucle tu donne une pièce , jusqu'a ce que la monnaie restante a donner soit égale a 0
ca simplifie beaucoup ^^
Merci beaucoup pour la réponse, oui je savais que c'était moche :) et en plus ça me casse la tete ! mais le problème maintenant que le reste il change a chaque fois , comment ton code va récupérer ça.
par exemple : 6,60
il rend 5chf il reste 1.60 il faut que le reste soit 1.60 et non 5chf(d'après ton exemple) et il continue dans ce cas .
est que t'arrive à m'écrire un bout de code pour ça par exemple ?
Merci infiniment
par exemple : 6,60
il rend 5chf il reste 1.60 il faut que le reste soit 1.60 et non 5chf(d'après ton exemple) et il continue dans ce cas .
est que t'arrive à m'écrire un bout de code pour ça par exemple ?
Merci infiniment
ça marche pas apparemment comme j'ai dis il fait juste la première condition pour 5 mais il continue pas en plus si je vais rendre 11chf par ex je dois rendre 2fois la pièce de 5 qui n'étais pas le cas avec ça :
while (getMonnaiesArendre()>0){
if (getMonnaiesArendre()>=5){
tarifChoisis.nbrDePiecesDe5=tarifChoisis.nbrDePiecesDe5-1;
System.out.println("nbr de pieces de 5"+tarifChoisis.nbrDePiecesDe5);
}
else if (getMonnaiesArendre()>=2){
tarifChoisis.nbrDePiecesDe2=tarifChoisis.nbrDePiecesDe2-1;
System.out.println("nbr de pieces de 2"+tarifChoisis.nbrDePiecesDe2);
}
monnaiesArendre=0.0;
piecesChargees.total=0;
}
18 mai 2014 à 11:01
merci pour ton aide, il me semble que ton idée est plus logique mais ché pas si ça va marcher avec mon programme maintenant ! car ce traitement on va le faire que lorsque le client il appui sur imprimer le billet et le montant inséré est supérieur au prix.
quand j'ai mis ton code ça m'affiche des erreurs , est ce que t'arrive à m'expliquer ce code , que ce qu'il fait concrètement, c koi monnaie et comment il va appeler ces méthode sachant que mon monnaie a rendre change a chaque moment ou le client insère des pièces.
Merci infiniment
18 mai 2014 à 12:48
Tu as tout le code, il n'y a rien de plus. La seule chose qui manque c'est :
"que ce qu'il fait concrètement"
J'ai mis une méthode main avec un exemple, j'ai même fait un copier-coller du résultat de l'exemple, je ne vois vraiment pas ce qu'il te faut de plus pour comprendre ce que ça fait !
"est ce que t'arrive à m'expliquer ce code"
Si on enlève la partie d'affichage et le main, qui ne servent qu'à tester, tu as 10 lignes de codes.
Tu ne peux pas comprendre par toi même 10 lignes de codes ?
"appeler ces méthode sachant que mon monnaie a rendre change a chaque moment"
Il n'y a qu'une seule méthode à appeler : monnaie. La méthode afficher et le main c'était pour tester. Tu peux appeler la méthode monnaie autant que fois que tu veux, elle indépendante de tout contexte, le résultat est uniquement lié à la valeur de son paramètre.