MezData-Logo

Geld-Wechsler, vordefiniertes Array

Münzwechselautomat

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 (den gab es mal), 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?

Antwort1 * 50 Cent, 1 * 10 Cent, 1 * 5 Cent.

Repräsentation der Münz-Schächte im Programm

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

In der 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:

public class Automat{
  static final int mWert[] = {1,2,5,10,20,50,100,200}; // Liste mit den Wertangaben der Schächte
  static final String mName[] = {"1 Cent","2 Cent","5 Cent","10 Cent","20 Cent","50 Cent","1 Euro","2 Euro"};
  static void wechseln(int rest){
  }
}

Das Schlüsselwort final definiert die Variable als Konstante {read only}.
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]'?

Antwort: mWert[4| = 20; mName[4] = "20 Cent"

Analyse des Ausgabe-Algorithmus

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
Rausgeben: 666 Cent
3 * 2 Euro
1 * 50 Cent
1 * 10 Cent
1 * 5 Cent
1 * 1 Cent
Ausgabe Geldrückgabe

Benennung der Variablen

int rest;    // Wechselgeld, das noch ausgegeben werden soll
int muenzen; // Anzahl der auszugebenden Münzen
int i;       // Index, die jeweilige Schacht Nr.

Berechnungs-Ausdrücke

muenzen = rest / mWert[i]; // Anzahl der Münzen ermitteln
rest = rest % mWert[i];    // Ermitteln des Restes

Entwickeln Sie Methode wechseln(rest:GZ) Ausgabe siehe Abbildung 1. Erstellen Sie ein Struktogramm.

StruktogrammStruktogramm
Quelltext anzeigen..

Mit Münzspeicher

Der Füllstand der Münzschächte soll berücksichtigt werden, am Anfang sind in jedem Schacht 10 Münzen. Entwickeln Sie Methoden und Struktogramme:

AutomatM

mWert[]:GZ = {1,2,5,10,20,50,100,200} {read only}

mName[]:Text = {"1 Cent","2 Cent","5 Cent","10 Cent","20 Cent","50 Cent","1 Euro","2 Euro"} {read only}

muenzen[]:GZ = {10,10,10,10,10,10,10,10}

inEuro(n:GZ):Text

ausgebenSchaechte()

ausgeben(rest:GZ)

 1 Cent: 10
2 Cent: 10
5 Cent: 10
10 Cent: 10
20 Cent: 10
50 Cent: 10
1 Euro: 10
2 Euro: 10
Wert: 38 Euro 80 Cent
Ausgabe Schächte

inEuro(n:GZ):Text gibt die Centeingabe n als Euro und Cent aus z.B. inEuro(555)-> 5 Euro 55 Cent

Struktogramm Struktogramm

ausgebenSchaechte() gibt den Füllstand jedes Schachtes zurück und am Ende den Gesamtbetrag des Münzspeichers, Abbildung 2.
Zur schönen Formatierung der Ausgabe wird dieser Code verwendet:

System.out.printf("%7s: %d\n",mName[i],muenzen[i]);
Struktogramm Struktogramm

ausgeben(rest:GZ) versucht das Restgeld mit den vorhandenen Münzen aus zu geben.
Falls Restgeld übrig bleibt wird dies gemeldet.

Struktogramm Struktogramm
Quelltexte anzeigen..
Ausbau zum Verkaufsautomat

Erweitern Sie Ihr Wechselprogramm zu einem Verkaufsautomaten (Eis-Automat in der Schule):

  1. Der Verkaufsautomat hat 6 Tasten (Buttons)
  2. Die Produktnamen werden in einem Array 'produkte' und die Preise in einem Array 'preise' abgelegt.
  3. Nach dem Start des Programms werden die Produkte mit den Preisen auf die Buttons geschrieben.
  4. Der Kunde soll einen Geldbetrag einwerfen, Eingabe einer Zahl.
  5. Der Kunde wird nun aufgefordert, ein Produkt durch Drücken eines Buttons zu wählen.
  6. Wenn der Geldbetrag ausreicht, gibt der Automat das Produkt und das Wechselgeld aus, sonst fordert er eine Nachzahlung.

Entwickeln und implementieren Sie das Programm. Testen Sie Ihre Lösung und dokumentieren Sie sie mit einem Struktogramm.

Zusatz-Aufgabe

Der Automat wird um eine Wechselgeld-Verwaltung erweitert:

  1. Durch ein Array 'schacht[]' wird die Anzahl der Münzen in jedem Schacht verwaltet.
    Beim Start des Programms liegen in jedem Münz-Schacht 2 Münzen.
  2. Der Kunde gibt nun den Geldbetrag münzweise ein (simuliert durch Buttons).
    Die Münz-Werte werden den jeweiligen Schächten zugeschlagen.
  3. Nach der Münzeingabe werden die Anzahl der Münzen in den Schächten ausgegeben.
  4. Es kann nur soviel Geld herausgegeben werden wie sich in den Schächten befindet.
  5. Wenn das Wechselgeld knapp wird, bittet der Automat um passende Eingabe.