Wert aufteilen und ausgeben
-
Hallo alle miteinander,
ich habe wieder mal ein Problem. Ich habe einen virtuellen Getränkeautomaten
programmiert. Mittlerweile bin ich an dem Punkt wo er den Wechselgeldbetrag
ausrechnet und anzeigt.Nun soll er den Wechselgeldbetrag z.B. 1,40 Euro also 140 Cent
(Ich habe alle Beträge in Cent gehalten um float-Zahlen zu vermeiden.) in Form
von 2 Euro, 1 Euro, 50 Cent, 20 Cent und 10 Cent-Münzen "auszahlen".Leider weiß ich nicht so ganz wie ich das bewerkstelligen soll und bitte darum
um eure kompetente Hilfe.Vielen Dank für die Mühe.
Gruß freddy2008
-
Z.B. so (Pseudocode):
Münzen = [ 200, 100, 50, 20, 10, 5, 2, 1 ] solange Betrag > 0 wenn Betrag > Münzen[i] Betrag = Betrag - Münzen[i] Münzen[i] ausgeben sonst i++ ende ende
-
Hier mal ein Ansatz in Pseudocode:
while(betrag >= 2€) { rückgeld.add(2€); betrag = betrag - 2€; } while(betrag >= 1€) { rückgeld.add(1€); betrag = betrag - 1€; }
//EDIT:
War leider zu langsam
@Tim in der inneren Schleife >= sonst gibt es eine Endlosschleife
-
Hallo,
danke für die rasche Hilfe. Ich habe mich jetzt am Vorschlag von Storm.Xapek.de
orientiert (nicht böse sein Tim). Das funktioinert auch alles ganz gut. Ein
kleines Problem gibt es aber dennoch.So wie es jetzt ist gibt er alle Münzen aus die er ausgeben würde d.h. Bei einem
Betrag von 1,40 Rückgabe schreibt er 1.00 Euro + 0.20 Euro + 0.20 Euro. Das ist
zwar richtig sollte aber eigentlich, aber ich bräuchte es ein wenig anders.
Sorry, wenn ich mich falsch ausgedrückt habe. Eigentlich sollte dastehen:
1x 1.00 Euro, 2x 0.20 Euro usw.Wenn ich euch nochmals um eure Mühe bitte dürfte.
Vielen Dank
Gruß freddy2008
-
...und wenn man möglichst wenig münzen herausgeben will: http://en.wikipedia.org/wiki/Knapsack_problem
-
Dem Automaten soll egal sein, wie viel der arme Kerl schleppen muss. Da sollte man eher beim Vorrat der vorhanden Münzen ansetzen und darauf abzielen, daß man möglichst kein Geschäft ablehnen muss, weil man nicht herausgeben kann.
@op:
(nicht böse sein) aber ich orientiere mich an Tims Vorschlag. Der hat den Vorteil, daß er in Osteuropa nur marginal verändert werden muss...# ist natürlich Python Muenzen = [ 200, 100, 50, 20, 10, 5, 2, 1 ] Ausgabe = [0, 0, 0, 0, 0, 0, 0, 0] i = 0 while Betrag > 0: if Betrag >= Muenzen[i]: Betrag = Betrag - Muenzen[i] Ausgabe[i] += 1 else: i += 1 for m, a in zip(Muenzen, Ausgabe): print("%d * EUR %.2f" % (a, m/100.0))
Dir fehlt sowas wie Ausgabe, wo du am Ende nachschauen kannst, wie oft welche Münze hinaus muss.