Hilfe bei einem kleinen Programm
-
Hiho,
also ums kurz zu machen, habe folgende Aufgabe:Schreiben Sie ein C3-Programm, welches einen Bankautomaten simuliert. Das
Programm bekommt als Eingabe einen Betrag in Euro übergeben, der vom Automaten
ausgezahlt werden soll. Der Automat versucht diesen Betrag in moglichst
viele unterschiedlich großen Geldscheinen zusammenzustellen. Er achtet
weiterhin darauf, dass immer möglichst gleich viele Scheine von jedem Wert
ausgezahlt werden. Ihr Programm soll folgende Punkte berücksichtigen:
a) Im Automat sollen die verfügbare Anzahl von Geldscheinen der Euro-
Banknoten (5, 10, 20, 50, 100) in globalen Variablen gespeichert werden.
Beim Start des Programms betragt diese jeweils 10.
b) Bevor ein Geldbetrag ausgezahlt wird, muss gepruft werden, ob der Betrag
mit den vorhandenen Banknoten ausgezahlt werden kann. Ist dies nicht
der Fall, so soll eine Fehlermeldung ausgegeben werden und das Programm
wird beendet.
c) Die Zusammenstellung der Geldscheine soll in einer Prozedur erfolgen.
Diese soll in jeweils einzelnen Parametern die Anzahl der 5, 10, 20, 50
und 100 Euronoten zuruckliefern, in denen der Wert ausgezahlt werden
soll.
d) Die Ausgabe der Geldcheine erfolgt im Hauptprogramm. Das Format kann
dem Beispiel entnommen werden.
e) Das Hauptprogramm soll in einer Schleife pro Schleifendurchlauf folgende
Aktionen durchfuhren:
- Erfragen des Geldbetrages
- Wird ein negativer Wert eingegeben, so soll das Programm beendet
werden
- Wird ein positiver Wert eingegeben, so wird eine mogliche Kombination
der Banknoten zur Auszahlung zusammengestellt, falls genügend
Geldscheine im Automaten vorhanden sind
- Gegebenenfalls die Kombination der Banknoten ausgegebenBeispiel: Auszahlung von 100 Euro
Eingabe: 100
Ausgabe:
1 x 50 Euro
1 x 20 Euro
2 x 10 Euro
2 x 5 Euro
In allen anderen Varianten wurde eine Banknotengröße nicht berucksichtigt
werden. Diese Ausgaben waren dann nicht im Sinne dieses Bankautomaten und
wurden bei der Korrektur als falsch gewertet werden. z.B.
Ausgabe:
1 x 50 Euro
2 x 20 Euro
1 x 10 EuroIch hab versucht es hinzubekommen, doch ich weiß nicht wie ich das mit der Prozedur von c) machen kann um am Ende dann eine Ausgabe zu gestalten.
Hier mein Versuch:prog bank int s1=10; //s1 steht für den 100er Schein int s2=10;//s2 steht für den 50er Schein usw. int s3=10; int s4=10; int s5=10; bool check(int test) { if (test< 0) print("Betrag ist negativ"); return false; if (test>1850 ||test%5!=0) print("Betrag nicht auszahlbar"); return false; else return true; } { int geld; print("Wieviel Geld soll abgehoben werden?"); read(geld); if(check(geld)==true) while (geld>=0) { if(geld-100>=0) geld= geld-100; s1=s1-1; if(geld-50>=0) geld= geld-50; s2=s2-1; if(geld-20>=0) geld= geld-20; s3=s3-1; if(geld-10>=0) geld= geld-10; s5=s5-1; if(geld-5>=0) geld= geld-5; s5=s5-1; } print.. }
-
Aeh, warum beschraenkst du dich auf 1850, was wenn nun 20 Scheine von jeder Sorte zur Verfuegung stehen. Was ist, wenn ein zweiter Kunde kommt und Geld abhebt? Auch verstehe ich nicht, warum beim Beispiel eine Ausgabe falsch ist.
Dein Test auf Auszahlbarkeit ist falsch. Wenn z.B. keine 5er mehr im Automaten sind, dann kann 55 Euro nicht ausgezahlt werden. Auch geheort zur Aufgabenstellung, das du ein Programm erstellst. Also Benutzereingaben auswertest und Ausgaben auf den Bildschirm taetigst. Irgendwie hast du insgesamt noch nicht allzu viel. Zu deinem konkreten Problem:
c) Die Zusammenstellung der Geldscheine soll in einer Prozedur erfolgen.
Diese soll in jeweils einzelnen Parametern die Anzahl der 5, 10, 20, 50
und 100 Euronoten zuruckliefern, in denen der Wert ausgezahlt werden
soll.Du kannst ja mal die Signatur (Funktions-/Prozedurkopf) der Funktion gemaess Aufgabenstellung aufschreiben.
PS: Du haettest dir etwas mehr Muehe geben koennen, die Aufgabenstellung anstaendig zu formatieren. Oder zu mindestens die Sonderzeichen entfernen koennen.
-
Ich beschränke mich auf 1850, weil unter a) ja steht dass es nur 10 scheine von jeder sorte sind.
Wenn 55 euro eingegeben werden, soll ich doch ja 2x20,1x10 und 1x5 euro dann nehmen und brauch keine 11 5 euro scheine?!
Was ist wenn ein 2. kunde kommt? ja das habe ich mich auch schon gefragt, doch wird ja nicht in der aufgabenstellung explizit gesagt, dass ein 2. kommt
Warum ein Bsp falsch ist?
Weil wenn möglich jede art von schein genommen werden soll.
Hatte im übrigen schon formatiert, hab aber anscheinend ein paar o,u,a vergessen und aus ihnen keine ö,ä,ü gemacht."Du kannst ja mal die Signatur (Funktions-/Prozedurkopf) der Funktion gemaess Aufgabenstellung aufschreiben. "
ich hab ja echt schon lange überlegt wie ich das umsetzen kann, bin aber echt noch ein Anfänger was das betrifft.Soll zb. die rpint anweisungen mit in die funktion?
-
Hat denn keiner mehr eine Idee?
-
Ungetestet:
int fuenf = 0, zehn = 0, zwanzig = 0, fuenfzig = 0, hundert = 0, scheine = 10, geld = 55; if(geld > (5+10+20+50+100)*scheine || geld <= 0 || geld%5) { printf("Betrag nicht auszahlbar"); return 0; } while(geld >= 185) { geld -= 100; ++hundert; } while(geld >= 85) { geld -= 50; ++fuenfzig; } while(geld >= 35) { geld -= 20; ++zwanzig; } while(geld >= 15) { geld -= 10; ++zehn; } while(geld >= 5) { geld -= 5; ++fuenf; } //print
-
Oder so:
int fuenf = 0, zehn = 0, zwanzig = 0, fuenfzig = 0, hundert = 0, scheine = 10, geld; print("Wieviel Geld soll abgehoben werden?"); scanf("%d", &geld); if(geld > (5+10+20+50+100)*scheine || geld <= 0 || geld%5) { printf("Betrag nicht auszahlbar"); return 0; } while(geld >= 185) { geld -= 100; ++hundert; } while(geld >= 85) { geld -= 50; ++fuenfzig; } while(geld >= 35) { geld -= 20; ++zwanzig; } while(geld >= 15) { geld -= 10; ++zehn; } while(geld >= 5) { geld -= 5; ++fuenf; } //print
Deweiteren sind read() und bool c++