# Wechselgeld Automat



## Wirtschaftsingenieur (5. Nov 2009)

Kann mir irgendwer sagen wie man an so einer Aufgabe herangeht und wie man Schritt für Schritt zur Lösung kommt?

Wechselgeld Automat
Ein Automat soll einen beliebigen Geldbetrag zwischen 0 € und 5,50 € in Euro-Münzenwerten von 2 €, 1 €, 50 ct, 20 ct, 10 ct, 5 ct, 2 ct, und 1 ct rausgeben können. Erstellen Sie ein JAVA-Programm, weclhes zu einem eingegebenen Geldbetrag die nötigen Euro-Münzwerte ausgibt. Der Geldbetrag wird in Cent eingegeben und es soll geprüft werden, ob es sich um einen gültigen Betrag von maximal 550 Cent handelt. Folgende Konsolenausgabe zeigt die Funktionalität des zu erstellenden Programms für eine beispielhafte Eingabe von 396 Cent:

Geldbetrag in ct (maximal 550 cent): 396
Wechselgeld: 2 €, 1 €, 50 ct, 20 ct, 20 ct, 5 ct, 1 ct,

Das ist eine ehemaliger Leistungsnachweis. Wäre nett, wenn jemand eine Lösung hätte. Danke.


----------



## Marco13 (5. Nov 2009)

Stell dir mal vor, du solltest mir 396 cent mit möglichst wenigen Münzen geben. Beschreib' mal genau, wie du das machen würdest.
Versuche dann, "Muster" in dem zu erkennen, was du machst - ob du z.B. immer "das gleiche" machst, nur mit irgendwelchen anderen Zahlen.
Beschreibe die Vorgehensweise dann möglichst allgemein (und trotzdem präzise)


----------



## Wirtschaftsingenieur (5. Nov 2009)

Ich komm nicht weiter.

Hier mein Ansatz:

```
System.out.println("Bitte geben Sie den Geldbetrag ein!");
System.out.println("Geldbetrag in ct (maximal 550ct): ");
double Geldbetrag = StdInput.readDouble();
double zwei = 2, eins = 1, fünfzig = 50, zwanzig = 20, zehn = 10, fünf = 5, zweic = 2, eins = 1;
```

Ich vermute, dass das irgendwas mit Modulo (%) zu tun hat. Aber wir haben soetwas noch nicht näher behandelt.


----------



## Marco13 (5. Nov 2009)

OK, SO basic. Die Zahlen sollten "int"s sein - man rechnet nicht umsonst mit cent, das macht's einfacher. Man braucht modulo übrigens nicht unbedingt... aber wenn ich jetzt sagen würde, was man schreiben muss, oum den Effekt von modulo zu erreichen, wäre das schon der Halbe Code...  Und eine (meintewegen in Worten beschriebene) Idee zur Vorgehensweise allgemein hast du noch nicht gepostet.


----------



## Sonecc (6. Nov 2009)

1. eins ist doppelt bei deinem "lösungsansatz" der keiner ist
2. ein euro sind nicht 1, sondern 100 cent
3. vernünftige namen verwenden
4. vorgehensweise überlegen (bsp. wäre den höchsten centbetrag (also 200 für 2€) von dem eingegebenen abzuziehen und dann zu prüfen ob das zuviel war oder nicht) gibt aber auch andere wege wie den grade beschriebenen... und so wie ich ihn beschrieben habe ist er nicht vollständig


----------



## ARadauer (6. Nov 2009)

Wirtschaftsingenieur hat gesagt.:


> Wäre nett, wenn jemand eine Lösung hätte. Danke.



Willst du die Lösung oder soll ich dir helfen?

Ich geb dir mal den Ansatz: Mach dir ein Array mit den Werten, von groß nach klein.

Geh in einer Schleife ober die Werte und schau wie oft der akutelle Wert in deinem Betrag enthalten ist.
Das ist dann die Anzahl der Scheine/Münzen, den Rest weißt du dann deinem Betrag zu und nächster Wert...

Das ist genau das was du im realen Leben auch machen würdest... 127.. mhn 500 ne brauch ich nicht, 200 nein, 100 .. 1 mal.. ok rest 27, 50 nein.. 20 .. 1 mal, rest 7 usw....

Hier hab ich vor Kurzem die Lösung gepostet: Kleine Warnung bevor du dir den Code holst... das ist ein sehr simples Anfängerbeispiel, ich würd wirklich versuchen, das selber zu lösen... es wird nicht einfacher!!!!

http://www.java-forum.org/java-basics-anfaenger-themen/90574-geldstueckelung.html


----------



## Wirtschaftsingenieur (6. Nov 2009)

Schleifen, Methoden und Felder kommen erst in den nächsten Nachweisen drann.
Die Aufgabe soll man mit den Grundlagen sowie mit if/else lösen.
Ich probier das jetzt nochmal und schau mir das ganze nochmal an und stell heute Abend mal was rein. Vielleicht komm ich ja zur Lösung.


----------



## ARadauer (6. Nov 2009)

> Schleifen, Methoden und Felder kommen erst in den nächsten Nachweisen drann.


achhhh.. das die Deutschen immer so langsam sind....


----------



## Sonecc (6. Nov 2009)

ohne schleifen dürfte das eine relativ anstrengende Tipparbeit werden:autsch:


----------



## Marco13 (6. Nov 2009)

Das erklärt aber auch die ansonsten alberne Beschränkung auf 550 cent :autsch:


----------



## Wirtschaftsingenieur (6. Nov 2009)

An dieser Aufgabe scheiterten 70 % im letzten Semester.


----------



## Sonecc (6. Nov 2009)

aus purer faulheit oder weil ihr doch schleifen nutzen dürft :lol:


----------



## ARadauer (6. Nov 2009)

Wirtschaftsingenieur hat gesagt.:


> An dieser Aufgabe scheiterten 70 % im letzten Semester.


lächerlich... Auf welche Schule/Uni gehst du nochmal?

Jetzt weiß ich warum deutsche Firmen so scharf auf Praktikanten aus Österreich sind...


----------



## Sonecc (6. Nov 2009)

ey, nich alle deutschen sind so


----------



## ARadauer (6. Nov 2009)

heute ist Freitag, man darf nicht alles ernst nehmen was ich Freitags schreibe ;-)


----------



## Sonecc (6. Nov 2009)

wieso, ganz so unrecht haste nich


----------



## ARadauer (6. Nov 2009)

aja soviel schreibarbeit ist das auch wieder nicht... copy und paste wahrscheinlich... das ist so eine typische übung, damit dem studenten auffällt, dass da extrem viel code verdopplung drinnen ist... dann frag er sich mhn.. da müsst es doch was geben und dann lernt man von den gloreichen Schleifen und Arrays und ist voll happy 


```
public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

      int betrag =-1;


      while(betrag<0 || betrag>550){
         System.out.println("Betrag in cent eingeben, zwischen 0 und 550:  ");     
         String line = in.readLine();
         try {
            betrag = Integer.parseInt(line); 
         } catch (Exception e) {
           System.out.println("Eine Zahl! Gruzefix Zakarament!!");
         }

      }

      if(betrag>=200){
         int anzahl =(int) (betrag/200);
         betrag = betrag -anzahl*200;  
         if(anzahl>0)
            System.out.println(anzahl +" X "+200+" Rest: "+betrag);
      } 
      if(betrag>=100){
         int anzahl =(int) (betrag/100);
         betrag = betrag -anzahl*100;  
         if(anzahl>0)
            System.out.println(anzahl +" X "+100+" Rest: "+betrag);
      } 
      if(betrag>=50){
         int anzahl =(int) (betrag/50);
         betrag = betrag -anzahl*50;  
         if(anzahl>0)
            System.out.println(anzahl +" X "+50+" Rest: "+betrag);
      } 
      if(betrag>=20){
         int anzahl =(int) (betrag/20);
         betrag = betrag -anzahl*20;  
         if(anzahl>0)
            System.out.println(anzahl +" X "+20+" Rest: "+betrag);
      } 
      if(betrag>=10){
         int anzahl =(int) (betrag/10);
         betrag = betrag -anzahl*10;  
         if(anzahl>0)
            System.out.println(anzahl +" X "+10+" Rest: "+betrag);
      } 
      if(betrag>=5){
         int anzahl =(int) (betrag/5);
         betrag = betrag -anzahl*5;  
         if(anzahl>0)
            System.out.println(anzahl +" X "+5+" Rest: "+betrag);
      } 
      if(betrag>=2){
         int anzahl =(int) (betrag/2);
         betrag = betrag -anzahl*2;  
         if(anzahl>0)
            System.out.println(anzahl +" X "+2+" Rest: "+betrag);
      } 
      if(betrag>=1){
         int anzahl =(int) (betrag/1);
         betrag = betrag -anzahl*1;  
         if(anzahl>0)
            System.out.println(anzahl +" X "+1+" Rest: "+betrag);
      }

      System.out.println("fertig...");

   }
```


----------



## Vayu (6. Nov 2009)

hättest ruhig n spoiler um den code setzen können ^^ jetzt sieht er ja sofort die Lösung


----------

