Wechselgeld 5 besten Kombinationen



  • ehrlich gesagt ja: sie kann einfach und ohne intensives nachdenken programmiert werden und wenn man die geldsumme noch in intervalle aufteilt (z.b. 500€, 200€, 100€; 50€, 20€, 10€; usw) und für jedes intervall einmal den algorithmus aufruft, läuft es ziemlich schnell. es ist in nächster zeit kaum damit zu rechnen, dass noch weitere geldwerte eingeführt werden, und wenn in zukunft scheine mit 500€ und 200€ abgeschafft werden, müssen ja eigentlich nur die beiden inneren schleifen entfernt werden.

    verbesserungswürdig wäre vielleicht noch, für die geldwerte ein array anzulegen und für die einzelnen positionen des array konstanten mittels enum zu definieren, aber so weit waren wir bisher noch nicht.



  • Ich hatte es schon sehr weit oben gesagt, die 5 "Besten" ausgeben (was auch immer das Kriterium ist) macht in der Praxis keinen Sinn. Dann liegen diese immer sehr nah beisammen. In der Realität will aber niemand zwischen 5 Optionen wählen, die sich kaum unterscheiden.

    Das ist aber relativ irrelevant um die Lerninhalte dieser Aufgabe zu vermitteln. @EinNutzer0: Übrigens wird die Aufgabe sicher nicht prüfungsrelevant sein. Die Konzepte auf denen wob, SeppJ etc. hier aber die ganze Zeit rumreiten, sollten aber mit Sicherheit abgeprüft werden (oder diese Prüfungen kann man genauso in der Pfeife rauchen wie das didaktische Konzept von leas Ausbilder...)



  • wobei mir jetzt gerade beim zähneputzen so eingefallen ist, dass es eigentlich nie gut sein kann, bspw. 300€ mit geldwerten < 100€ auszuzahlen, weshalb es irgendwie sinn machen könnte, den betrag generell in diese intervalle (> 500, 500 >= X >= 100, 100 >= X >= 10, usw.) aufzuteilen und damit eigentlich 6 funktionen mit je 3 schleifen zu erstellen. aber auch so weit waren wir noch nicht.



  • @Wade1234 sagte in Wechselgeld 5 besten Kombinationen:

    wobei mir jetzt gerade beim zähneputzen so eingefallen ist, dass es eigentlich nie gut sein kann, bspw. 300€ mit geldwerten < 100€ auszuzahlen, weshalb es irgendwie sinn machen könnte, den betrag generell in diese intervalle (> 500, 500 >= X >= 100, 100 >= X >= 10, usw.) aufzuteilen und damit eigentlich 6 funktionen mit je 3 schleifen zu erstellen. aber auch so weit waren wir noch nicht.

    Beifall, jetzt baust du auch nochmal das Gleiche wie ein @EinNutzer0 und machst max x Scheine...

    Genauso deine Quatschüberlegungen, weil es ja in der Realität keine neuen Scheine geben wird. Erstmal hat die Realität nichts damit zu tun, was die korrekte Lösung für eine theoretische Aufgabe ist und zweitens bist du ab morgen gefeuert, weil dein Chef seine Automaten eigentlich an eine weitere Bank die einfach andere Scheine als die Bank davor oder ins Ausland verkaufen wollte. An der Realität scheitert dein Programm noch viel schlimmer als an der Theorie.



  • Hatte ich schon erwähnt, dass ich mal im Casino 500 € gewonnen hatte und mir beim Umtausch ein 500 €-Schein gegeben wurde? Ich wurde allerdings vorher gefragt, ob ich mit einem 500 €-Schein einverstanden wäre... (weil, das stimmt, im Alltag ist ein 500 €-Schein wirklich nicht wirklich praktikabel.)

    Noch mal zu dem Code... Man könnte doch einfach 500, 200 und 100 als mögliche Werte aus dem Array entfernen. Dann würde das Problem der "zu großen Scheine" nicht auftreten. Und wenn sich die 5 "besten" Kombinationen nicht besonders unterscheiden, könnte man auch noch so etwas wie einen "Combinations Similarity Comparison" machen... Also eine Definition für die Ähnlichkeit zweier Kombinationen aufstellen.



  • @EinNutzer0 sagte in Wechselgeld 5 besten Kombinationen:

    weil, das stimmt, im Alltag ist ein 500 €-Schein wirklich nicht wirklich praktikabel.

    Dein Einkommen ist einfach nicht hoch genug. Wenn Du Deine Klamotten bei C&A kaufst, ist ein 500€ - Schein natürlich unpraktisch, wenn Du Dich aber im KaDeWe oder bei Harrods einkleidest, sieht das schon wieder ganz anders aus.
    Aber, wie schon gesagt wurde, seit einigen Posts wird versucht, in die ursprüngliche Aufgabenstellung etwas hineinzuinterpretieren, was da nicht drin steht.



  • @TGGC sagte in Wechselgeld 5 besten Kombinationen:

    Beifall, jetzt baust du auch nochmal das Gleiche wie ein @EinNutzer0 und machst max x Scheine...

    ne eigentlich nicht.

    Genauso deine Quatschüberlegungen, weil es ja in der Realität keine neuen Scheine geben wird.

    selbst wenn: du müsstest doch nur die werte oben ändern.

    Erstmal hat die Realität nichts damit zu tun, was die korrekte Lösung für eine theoretische Aufgabe ist

    die theoretische aufgabe lautete "programmieren zu lernen", nicht "kindischen schwanzvergleich abziehen"

    und zweitens bist du ab morgen gefeuert, weil dein Chef seine Automaten eigentlich an eine weitere Bank die einfach andere Scheine als die Bank davor oder ins Ausland verkaufen wollte. An der Realität scheitert dein Programm noch viel schlimmer als an der Theorie.

    ich glaube, wenn ich so einen chef hätte, würde ich sogar freiwillig gehen......


  • Mod

    @Wade1234 sagte in Wechselgeld 5 besten Kombinationen:

    Erstmal hat die Realität nichts damit zu tun, was die korrekte Lösung für eine theoretische Aufgabe ist

    die theoretische aufgabe lautete "programmieren zu lernen", nicht "kindischen schwanzvergleich abziehen"

    Wenn du nicht siehst, dass deine Lösung das Ziel verfehlt, und auch nicht verstehst, was theoretische Abstraktionen damit zu tun haben sollen, dann hast du nicht kapiert, was "Programmieren Lernen" bedeutet.



  • Also ich hab mich gestern mal hingesetzt und das "mal schnell" selbst implementiert. Und zwar die Rekursive Variante. Ergebnis:

    • Hat ein paar Stunden gedauert.
    • ~110 Zeilen C Code (Kommentare und "lesbare Formatierung" mitgezählt).
    • Ohne Optimierung des Algorithmus läuft das ganze mit den oben angegebenen 15 Geldwerten und Input = €100 ewig.
    • Mit Optimierung geht's dann quasi "instant", nur damit man auf die Idee kommt wie man das ohne Einschränkung was die verfügbaren Schein-/Münzwerte angeht optimieren kann... also dazu braucht's schon ein bisschen Erfahrung oder reichlich viel Schlau.
    • Die Sache ist ausreichend komplex dass man da ohne weiteres auch als Erfahrener Programmierer schnell mal ein paar Fehler einbaut, die man ohne Debugger nur mühsam findet.

    Alles in allem IMO für Anfänger die noch mit den Grundlagen kämpfen viel zu krass.



  • @hustbaer
    Funktioniert deine Lösung auch mit 99999,99€?

    In der Aufgabenstellung steht nämlich:

    Fange beim Anwender eine Summe 0,01 < X < 100.000,00 ab.

    (siehe https://www.c-plusplus.net/forum/topic/350274/wechselgeld-5-besten-kombinationen/1)



  • @hustbaer sagte in Wechselgeld 5 besten Kombinationen:

    Alles in allem IMO für Anfänger die noch mit den Grundlagen kämpfen viel zu krass.

    Sehe ich auch so. OK, vielleicht hat man als Vorkenntnisse Kombinatorik gehabt, aber dann sicher nur die Anzahl von Variationen, Permutationen bzw. Kombination und nicht Verfahren, um diese einzeln zu berechnen zu können. Und selbst dann ist die Aufgabe noch nicht gelöst, da weitere Forderungen bestehen.



  • @SeppJ sagte in Wechselgeld 5 besten Kombinationen:

    @Wade1234 sagte in Wechselgeld 5 besten Kombinationen:

    Erstmal hat die Realität nichts damit zu tun, was die korrekte Lösung für eine theoretische Aufgabe ist

    die theoretische aufgabe lautete "programmieren zu lernen", nicht "kindischen schwanzvergleich abziehen"

    Wenn du nicht siehst, dass deine Lösung das Ziel verfehlt, und auch nicht verstehst, was theoretische Abstraktionen damit zu tun haben sollen, dann hast du nicht kapiert, was "Programmieren Lernen" bedeutet.

    meine lösung hat sie, glaube ich, verstanden, eure nicht. außerdem war ich ja noch gar nicht fertig.🙄

    @hustbaer sagte in Wechselgeld 5 besten Kombinationen:

    Alles in allem IMO für Anfänger die noch mit den Grundlagen kämpfen viel zu krass.

    das war eigentlich von vornherein klar und sie hat ja auch bestimmt 10 mal gesagt, dass sie die rekursiven lösungsvorschläge alle nicht versteht - hat nur keinen interessiert. 🤦🏼♂



  • Es ist eine sache zu sagen "verstehe ich nicht" und darauf zu hoffen, das sie mir jemand erklaert, oder konkret auf spezifische dinge eingeht und erfragt.

    Mit dem ersten ansatz mangelt es an eigeninitiative und in dem fall wuerde ich auch nicht darauf eingehen.



  • @Cardiac sagte in Wechselgeld 5 besten Kombinationen:

    Mit dem ersten ansatz mangelt es an eigeninitiative und in dem fall wuerde ich auch nicht darauf eingehen.

    ja das wäre dein gutes recht. aber wenn trotzdem jemand darauf eingeht, etwa weil die eigeninitiative ihre grenzen an den - manchmal sehr seltsamen - denkweisen des vorgesetzten findet, muss man ja nicht anfangen, dumm rumzupöbeln, oder?



  • @Wade1234 sagte in Wechselgeld 5 besten Kombinationen:

    das war eigentlich von vornherein klar und sie hat ja auch bestimmt 10 mal gesagt, dass sie die rekursiven lösungsvorschläge alle nicht versteht - hat nur keinen interessiert. 🤦🏼♂

    Und? Dann kann man ja anfangen, sich mit Rekursion zu beschäftigen, wird man früher oder später eh tun müssen. Man kann zwar jede rekursive Lösung auch iterativ umsetzen, aber das ist imho noch schwerer zu verstehen. Man hat TE eigentlich immer wieder erzählt, dass sich sowas am Besten rekursiv lösen lässt, aber weil TE bei Rekursion Verständnisprobleme hat sowas nicht haben wollte.



  • ja man kann sich ja auch einfach mal schnell eine ki programmieren, die nachher die beliebtesten möglichkeiten ausgibt. wer bei sowas am anfang überfordert ist, taugt eh nichts. 🙃



  • @Wade1234 Wenn du es nach 200+ beitraegen immer noch nicht verstanden hast, bist du nicht nur kritikunfaehig, sondern auch daemlich und ignorant.

    bevor du dich jetzt wieder ueber den wortlaut echauffierst; an deiner inkompetenz und mangelnder verstaendnis der dir aufgezeigten probleme aendert sich leider nichts.



  • An eine KI-Herangehensweise hatte ich auch schon gedacht, nur wird das in C äußerst sperrig. Außerdem wäre das kein 10-Zeiler mehr, und die KI muss ja auch irgendwie angelernt werden, und wer hat dazu schon Lust?

    Hätte ich eine Bank, würd ich den Kunden ihre Geldausgabe bewerten lassen: "Wie zufrieden waren Sie heute mit dem Geldautomaten auf einer Skala von 1 bis 10?", und dann damit die KI anlernen. 😅

    Aber ich denke, der einfachste zu verstehende Ansatz wäre für die TE: Rekursion + sorted linked list (ak "priority" queue) - dann muss auch nichts sortiert werden.



  • @hustbaer sagte in Wechselgeld 5 besten Kombinationen:

    Also ich hab mich gestern mal hingesetzt und das "mal schnell" selbst implementiert. Und zwar die Rekursive Variante. Ergebnis:

    • Hat ein paar Stunden gedauert.
    • ~110 Zeilen C Code (Kommentare und "lesbare Formatierung" mitgezählt).
    • Ohne Optimierung des Algorithmus läuft das ganze mit den oben angegebenen 15 Geldwerten und Input = €100 ewig.
    • Mit Optimierung geht's dann quasi "instant", nur damit man auf die Idee kommt wie man das ohne Einschränkung was die verfügbaren Schein-/Münzwerte angeht optimieren kann... also dazu braucht's schon ein bisschen Erfahrung oder reichlich viel Schlau.
    • Die Sache ist ausreichend komplex dass man da ohne weiteres auch als Erfahrener Programmierer schnell mal ein paar Fehler einbaut, die man ohne Debugger nur mühsam findet.

    Alles in allem IMO für Anfänger die noch mit den Grundlagen kämpfen viel zu krass.

    Da machste aber was falsch. Ich hab das grad in der Mittagspause in paar Minuten gemacht, maximal 20. Mit dem Abbruch nach 5 kürzesten Ausgaben läuft es problemlos in Millisekunden mit so einem onlinecompiler. Also einfach stur nach Aufgabe. Inkl. diesem Abbruchkriterium hats grad 65 Zeilen. Sehe auch keine wirklich komplizierte Sachen drin, ausser sich irgendwie ne dynamische Liste frickeln zu müssen.

    Und die Varainte für nur beste Lösung (also Teil a) ist ja nur ein primitiver 3 Zeiler, der ist auf jeden Fall geeignet.



  • @TGGC Leicht möglich dass ich was falsch gemacht habe 🙂

    Wenn ich zu Hause nochmal dran denk mach ich einen Thread zu dem Thema, damit wir die OP nicht weiter damit nerven. Eins vorweg: ich wollte eine Lösung die unabhängig von den Schein-/Münz-Werten immer korrekte Ergebnisse auswirft. Und da wüsste ich jetzt nicht wie man einfach erkennen kann dass die N besten Lösungen gefunden wurden. Kann natürlich sein dass ich es einfach nur nicht checke. Wenn ich gleich noch dran denke poste ich auf jeden Falll den Code. Wenns dir nicht zu doof ist kannst du mir dann auch gerne alles zeigen wo ich was zu kompliziert gemacht habe.