Problem: Bei einem Warenautomat soll Wechselgeld (Münzen) herausgegeben werden. Ein Programm soll nach der Eingabe des Wechselgeldes eine Liste der zurückgegebenen Wechselmünzen ausgeben.
Beispiel: Eisautomat in der Schule, das gewählte Eis kostet 1,35 Euro, es wurden 2 Euro eingeworfen, folglich soll er Automat 0,65 Euro Wechselgeld zurückgeben. Welche Münzen gibt er zurück?
Antwort: 1 * 50 Cent, 1 * 10 Cent, 1 * 5 Cent.
In unserer Automaten-Simulation befinden sich 8 Münz-Schächte, die Wertigkeit und die Namen der Münzen werden durch zwei Arrays dargestellt, um das Problem zu vereinfachen, wird in Cent gerechnet:
Schacht Nr. | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Münzwert in Cent | 1 | 2 | 5 | 10 | 20 | 50 | 100 | 200 |
Name der Münze | 1 Cent | 2 Cent | 5 Cent | 10 Cent | 20 Cent | 50 Cent | 1 Euro | 2 Euro |
public class Automat{ static void wechseln(int rest){ int mWert[] = {1,2,5,10,20,50,100,200}; // Liste mit den Wertangaben der Schächte String mName[] = {"1 Cent","2 Cent","5 Cent","10 Cent","20 Cent","50 Cent","1 Euro","2 Euro"}; } }
Hier muss die Anzahl der Elemente (mWert[8]) nicht angegeben werden, da der Compiler bei der Initialisierung der Arrays mit der Wert-Liste {1,2,...} die Anzahl der Elemente in der Liste als Grössenangabe verwendet. Die mName[]-Liste beinhaltet die Namen der Münzen, die Elemente sind von Typ String (Zeichenketten).
Welchen Wert hat 'wert[4]', welchen Wert hat ‘name[4]'? mWert[4| = 20 mName[4] = "20 Cent"
Wie kann bei gegebenen Wechselgeld-Wert die Anzahl der jeweiligen Rückgabe-Münzen ermittelt werden?
Idee: Beginne bei dem grössten Münzwert (Schacht 7). Teste wie oft der Münzwert im Wechselgeld enthalten ist und gebe ihn aus.
Wiederhole mit dem Resbetrag bei dem nächst kleineren Münzwert, solange noch ein Rest besteht. Beispiel mit 65 Cent:
Schacht Nr. | Münzwert | Anzahl der auszugebenden Münzen | Rest | Ausgabe |  |
---|---|---|---|---|---|
7 | 200 | 65 / 200 = 0 | 65 | Â | Â |
6 | 100 | 65 / 100 = 0 | 65 | Â | Â |
5 | 50 | 65 / 50 = 1 | 15 | 1* 50 Cent | Â |
4 | 20 | 15 / 20 = 0 | 15 | Â | Â |
3 | 10 | 15 / 10 = 1 | 5 | 1* 10 Cent | Â |
2 | 5 | 5 / 5 = 1 | 0 | 1* 5 Cent | -> Fertig |
int rest; // Wechselgeld, das noch ausgegeben werden soll int muenzen; // Anzahl der auszugebenden Münzen int i; // Index, die jeweilige Schacht Nr.
muenzen = rest / mWert[i]; // Anzahl der Münzen ermitteln rest = rest % mWert[i]; // Ermitteln des Restes mit dem Modulo-Operator
Aufgabe: Entwickeln und implementieren Sie das Programm. Testen Sie Ihre Lösung und dokumentieren Sie sie mit einem Struktogramm.
Lösung anzeigen..