Freeed91 Geschrieben 12. Oktober 2009 Geschrieben 12. Oktober 2009 Sers Leute ich hab wiedermal ein Problem^^ soll von meiner Schule aus ein Programm schreiben das einen Muenzspeicher simuliert. Im Grund genommen hat diesem Programm somit gewisse Schächte um 2 Euro, 1 Euro und 50 Cent Stücke zu speicher. Die Anzahl der Schächte ist nun aber begrenzt. Außerdem soll der Betrag der momentan im Speicher vorliegt ausgegeben werden. Mein Programm funktioniert soweit tadellos nur mit der dynamsichen Speicherverwaltung will es nicht. Der Benutzer soll somit im allg Konstruktor angeben können wieviele Schächte (maxM) im zur Verfügung stehn. Hier das Programm: #include <iostream> #include <conio.h> using namespace std; class CMuenzspeicher { private: int maxM; int anzM2,anzM1,anzM05; public: CMuenzspeicher(); CMuenzspeicher(int); void einwurf(double); double betrag(); void leeren(); }; //-------------------------Methoden--------------------------------------------- CMuenzspeicher::CMuenzspeicher() { maxM=5; anzM2=0; anzM1=0; anzM05=0; } /* CMuenzspeicher::CMuenzspeicher(int max) { int *schacht; schacht=new max; } */ void CMuenzspeicher::einwurf(double wert) { if(wert!=2&&wert!=1&&wert!=0.5) { cout<<"Es koennen nur 2Euro,1Euro oder 50 Cent(0.5 eingeben) eingeworfen werden!"; } else { if(wert==2) { if(anzM2<maxM) { anzM2++; cout<<"2 Euro eingeworfen"<<endl<<endl; getch(); system("CLS"); } else { cout<<endl<<endl<<"Schacht ist voll!"<<endl<<endl; getch(); system("CLS"); } } else if(wert==1) { if(anzM1<maxM) { anzM1++; cout<<"1 Euro eingeworfen"<<endl<<endl; getch(); system("CLS"); } else { cout<<endl<<endl<<"Schacht ist voll!"<<endl<<endl; getch(); system("CLS"); } } else if(wert==0.5) { if(anzM05<maxM) { anzM05++; cout<<"50 Cent eingeworfen"<<endl<<endl; getch(); system("CLS"); } else { cout<<endl<<endl<<"Schacht ist voll!"<<endl<<endl; getch(); system("CLS"); } } } } double CMuenzspeicher::betrag() { double erg; erg=(anzM2*2)+(anzM1*1)+(anzM05*0.5); return erg; } void CMuenzspeicher::leeren() { if((anzM2==0)&&(anzM1==0)&&(anzM05==0)) { cout<<"Speicher ist bereits leer!"; cout<<endl<<endl; } else { anzM2=0; anzM1=0; anzM05=0; } getch(); system("CLS"); } //---------------------------Hauptprogramm-------------------------------------- int main() { CMuenzspeicher automat; int wahl,schacht; double muenze,betrag; /* cout<<"Schachtanzahl eingeben: " cin>>schacht; CMuenzspeicher(schacht); */ do { cout<<"Muenzen einwerfen:\t1"; cout<<endl<<"Betrag anzeigen:\t2"; cout<<endl<<"Muenzschaechte leeren:\t3"; cout<<endl<<"Programmende:\t\t4"; cout<<endl<<endl<<endl<<"Ihre Wahl: "; cin>>wahl; if(wahl==1) { cout<<"Werfen sie eine Muenze ein: "; cin>>muenze; automat.einwurf(muenze); } if(wahl==2) { betrag=automat.betrag(); cout<<endl<<"Aktueller Betrag: "<<betrag; getch(); system("CLS"); } if(wahl==3) { automat.leeren(); } }while(wahl!=4); getch(); return 0; } [/PHP] Die Problemstelle habe ich auskommentiert. Bitte um hilfe :bimei Zitieren
Klotzkopp Geschrieben 12. Oktober 2009 Geschrieben 12. Oktober 2009 Wie kommst du darauf, dass du dafür dynamische Speicherverwaltung brauchst? Du musst doch nur maxM mit dem Konstruktorparameter initialisieren. Zitieren
Freeed91 Geschrieben 12. Oktober 2009 Autor Geschrieben 12. Oktober 2009 das war en Zusatz von meinem c++ Lehrer dynm. Speicherverwaltung ist momentan es neuste thema und er hat gemeint das wir das mal versuchen sollten. Zitieren
Klotzkopp Geschrieben 12. Oktober 2009 Geschrieben 12. Oktober 2009 Es gibt bei diesem Programm aber keine sinnvolle Anwendung für dynamische Speicherverwaltung. Du brauchst doch nicht mehr Variablen, wenn du größere Schächte brauchst. Oder meinst du mehr Schächte? Zitieren
Freeed91 Geschrieben 12. Oktober 2009 Autor Geschrieben 12. Oktober 2009 Der benutzer soll angeben wieviele Schächter der Automat haben soll. Dieser Wert soll dynamisch an maxM gegeben werden. Ob das sinnvoll ist oder nicht sei ja nun mal in der Raum gestellt ist ja nur ne reine Übung. Aber die Anzahl der maximalen Schächte soll nicht statisch sein, wie sie momentan in meinem Programm sind, sondern es soll am Anfang des Programmes eine Abfrage passieren und damit soll maxM belegt werden. Zitieren
Klotzkopp Geschrieben 12. Oktober 2009 Geschrieben 12. Oktober 2009 Der benutzer soll angeben wieviele Schächter der Automat haben soll. Dieser Wert soll dynamisch an maxM gegeben werden.Dir ist aber klar, dass dein Programm momentan maxM nicht für die Anzahl der Schächte benutzt, sondern für die Größe? Letzlich musst du deine anz-Variablen durch ein einziges, dynamisches int-Array ersetzen. Weitere Arrays für die Münzwerte und -namen wäre wohl auch nicht schlecht. Und du solltest dringend von Fließkommatypen weg. 0.5 mag ja noch ohne Rundungsfehler in einen double passen, aber 0.2 oder 0.1 tut es nicht mehr. Fließkommatypen sollte man übrigens grundsätzlich nicht auf Gleichheit prüfen. Rechne besser komplett in Cent, dann kannst du ganzzahlige Variablen benutzen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.