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.


Anmelden zum Antworten