c++ geldwechsel klasse
-
Es muss auch void eingabe sein und #include <iomanip> ohne ".h".
-
ja is noch gleich geblieben.. der arbeitet ja bis jetzt noch nicht bis zum 7. wert
-
Muss das nicht irgendwie so gehen
statt:
if(restbetrag>0) { cout<<restberechnen(zaehler)<<endl; cout<<scheineausgeben(zaehler); zaehler+=1; }nicht sowas stehen wie:
while(restbetrag>0) { restbetrag = restberechnen(zahler); cout << "xxx"; //Scheineausgeben zaehler++; }(Code aus dem Kopf geschrieben)
Mir fehlt das durch alle Zaehler gehen total oder hab ich das übersehen?
-
also das mit der while schleife is schon richtig aber dass hab ich alles noch net eingebaut weil ich erstma die funktionalität sicher gestellt haben wollte
befor das mir alles nur verwirrender wird hab ich das so gelassendanke für die vielen antworten schonmal
-
Du brauchst eigentlich nur 3 variablen und 3 Funktionen mit einem Konstruktor.
Die Funktionen sind: Eingabe/Ausgabe/Wechseln
Die Variablen sind: scheine[7], anzahl[7] (oder mehrdimensionales array), betragIn Ausgeben wird nichts weiter gemacht als durch scheine und Anzahl zu iterieren und diese werte auszugeben z.B. so:
void Ausgeben() { for(int i = 0; i < 7; ++i) cout << "\nSchein: " << scheine[i] << "\n Anzahl: " << anzahl[i] << "\n"; }"Eingeben" hast du schon richtig.
Beim Konstruktor müsst man den Anzahl-Array noch auf 0 setzen bzw. man sollte direkt einen Betrag mitgeben können.
GeldWechselRechner(int betrag): betrag(betrag) { scheine[0]=100; scheine[1]=50; scheine[2]=20; scheine[3]=10; scheine[4]=5; scheine[5]=2; scheine[6]=1; for(int i = 0; i < 7; ++i) anzahl[i] = 0; }Das wechseln ist wohl für dich der schwierigste Teil. Dafür brauchst du eine while- und eine for-schleife. Du musst für jeden schein den restbetrag solange verringern, bis dieser nichtmehr verringerbar ist. Bei jedem while-durchlauf wird dann das Ergebnis in anzahl[] hochgezählt. Das könnte dann so aussehen:
void Wechseln() { int restbetrag = betrag; for(int i = 0; i < 7; ++i) { while(restbetrag >= scheine[i]) { restbetrag -= scheine[i]; ++anzahl[i]; } } }Setzt du das alles zusammen hast du deine Klasse schon

Mit dem neuen Konstruktor verwendest du die Klasse dann wie folgt:GeldWechselRechner gwr(eingabe); gwr.Wechseln(); gwr.Ausgeben();Viel spaß!
-
Ich würd die Klasse anders schreiben:
void Wechseln() { int restbetrag = betrag; for(int i = 0; i < 7; ++i) { while(restbetrag >= scheine[i]) { restbetrag -= scheine[i]; ++anzahl[i]; } } }in
void Wechseln() { int restbetrag = betrag; for(int i=0;(restbetrag > 0);i++) { anzahl[i} = restbetrag/scheine[i]; restbetrag = restbetrag%scheine[i]; } }Könnte aufgrund der Division zwar langsamer sein, find ich aber leichter zu verstehen und "schöner"
-
Zenker schrieb:
Könnte aufgrund der Division zwar langsamer sein, find ich aber leichter zu verstehen und "schöner"
Finde ich nicht ;), aber da sieht man wieder, dass mehrere Wege nach Rom führen.
-
wow vielen dank dafür an alle
werde mich gleich dransetzengreetz isi
-
Ich persönlich würde für Eingabe und Ausgabe die Stream-Operatoren überladen. Ist wohl Geschmackssache.
-
Ich auch aber, das hilft dem TA wenig.