C#; Geldnoten verteilen?

... komplette Frage anzeigen

3 Antworten

Ich hätte es warscheinlich so gemacht:

Die werte für die einzelnen scheine Hätte ich jeweils an eine Objekt gebunden. Nebst wert des scheines und anzahl machste ne Bool rein die definiert obs fix ist oder nicht.

beim berechnen packste die 4 VOs in ein GeordnetesArray beim berechnen und durchläufst es einfach. Das Prüfen ob die die werte verändern darfst ist eine einzige if in der Schleife.

Du darfst aber nicht vergessen das die berechnung nicht mehr ausgeführt werden kann wenn ich bei jedem schein + oder - gedrückt habe.

Wichtig. Die fixen werte am besten zuerst aufrechnen und dann den normalen stückelungs algorhytmus über den restbetrag laufen lassen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Zurkiii
08.06.2016, 18:18

Sehr gute Lösung!

0
Kommentar von Tomzilla
08.06.2016, 19:24

Sorry, bin noch nicht all zu weit bei C#! Was ist ein Objekt genau?

Und den letzten Abschnitt mit den fixen Werten und dem "normalen Stückelungsalgorythmus" versteh ich auch nicht ganz!

Aber vielen Dank auf jeden Fall für deine ausführliche Antwort!

0

Definiere in einem Array, welche Scheine existieren. Dann wird der Betrag in einer Schleife gestückelt.

Beispiel: 110€
Restbetrag: 110€
500er: geht nicht
200er: geht nicht
100er: GEHT! 100er ausgeben
Restbetrag: 10€
500er: geht nicht
...
10er: GEHT! 10er ausgeben Restbetrag: 10€

Wenn man manuell Scheine eingibt, werden diese der Ausgabe hinzugefügt und der Restbetrag wird nach obiger Methode zerlegt.

Ausgaben speicherst du zB in einer HashMap (Schein | auszugebende Anzahl) und gibst diese dann aus, sobald der Restbetrag < kleiner Schein ist.


Hoffe das hilft dir. Bei Fragen frag einfach ;)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Tomzilla
08.06.2016, 18:08

Vielen Dank für deine Antwort!

Deine Idee habe ich bereits umgesetzt...

while (testDifferenzP > 0 && anpassungFertig)
{
x++;
if (!bearbeitet100 && testDifferenzP - 100 >= 0 && anzahl100 > 0)
{
testDifferenzP -= 100;
}
if (!bearbeitet50 && testDifferenzP - 50 >= 0 && anzahl50 > 0)
{
testDifferenzP -= 50;
}
if (!bearbeitet20 && testDifferenzP - 20 >= 0 && anzahl20 > 0)
{
testDifferenzP -= 20;
}
if (!bearbeitet10 && testDifferenzP - 10 >= 0 && anzahl10 > 0)
{
testDifferenzP -= 10;
}
}

Das Problem hierbei ist, dass es nach einem Klick auf "+" nur Noten abzieht, und keine dazu zählt. Das Kompensieren der 10er-Note (-50 +20) ist daher nicht möglich!

Aber vielleicht hast du ja noch eine Idee, wie ich diese Problem lösen könnte...

Danke im Voraus

0

switch(Hier die aussage die geswitched werden soll) {

        case 1:  [Der wert der geändert werden soll wenn case "1" true ist];

        case 2: [ Der wert der geändert werden soll wenn case "2" true ist];

        default: Messagebox.Show("Error: fehler mit switch statement", "Error");

}

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Tomzilla
08.06.2016, 19:27

Danke für deine Antwort, aber verstehe nicht ganz... Sollte das eine "Ergänzung" oder so für FouLou's Antwort sein? Den switch kenne ich drum eigentlich schon...

0

Was möchtest Du wissen?