tOm´ Geschrieben 11. November 2009 Geschrieben 11. November 2009 Hallo, Ich muss eine Aufgabe bearbeiten und habe damit sehr große Probleme. Wenn ich mir die Lösung ansehe, versteh ich warum das Programm so geschrieben wurde und verstehe auch die Hintergründe. Sobald ich jedoch die Aufgabenstellung vor mir habe ohne Lösung bin ich irgendwie hilflos und komm nicht damit zurecht. Ich möchte euch mal eine Beispielaufgabe zeigen: Quellcode (C++-Programm) im Text-Format (Bitte den Quellcode nicht auf mehrere Dateien verteilen!) • und eine ausführbare Datei (.exe). Sie haben einen 10-€-Schein und wollen für sich und Ihren Freund je ein Eis kaufen. Es gibt folgende Sorten: • Capri: 1,50 € • Nogger: 1,80 € • Cornetto: 2,50 € Setzen Sie den Eiskauf in ein nach objektorientierten Grundsätzen aufgebautes C++-Programm um. Es muss mindestens eine Klasse enthalten sein. Zunächst wird der Kunde gefragt, welches Eis er wünscht. Dann wird der Gesamtpreis und die Höhe des Wechselgeldes berechnet und in Euro und Cent auf dem Bildschirm ausgegeben. _______________________________________________ Ich weiss die Aufabe ist eigentlich sehr leicht. Jedoch befasse ich mich erst seit 2 Wochen mit C++ und muss diese Aufgabe bis nächste Woche bearbeitet haben. Allein die richtigen Attribute zu bestimmen ist schwierig für mich. Könntet ihr mir einen Lösungsvorschlag geben? Ich will es mir nicht leicht machen ich haber schon viele Stunden investiert aber bekomm es einfach nicht auf die Reihe. Nur würde mir ein grober Aufbau dabei Helfen meine eigenen Fehler zu sehen. Vorstellen würde ich es mir folgendermaßen: "Willkommen bei Toms Eiswaren" "Wir haben die Sorten Cornetto, Nogger und Capri." "Welches Eis möchten kaufen?" So dann fängt mein Problem schon an. Wie leg ich fest, dass die Eingabe (1) zb Cornetto bedeutet und vor allem wie lasse ich das Programm wissen, dass Cornetto einen Betrag von 2.50€ entspricht?!?! Reicht es eine Variable zu erstellen "Cornetto" und diese mit 2.50 zu belegen. Aber wie erkennt er dann, dass die Eingabe (1) Cornetto bedeutet? Wäre wirklich sehr sehr dankbar für jegliche Hilfe und Lösungsvorschläge! mfg tOm´ Zitieren
TDM Geschrieben 11. November 2009 Geschrieben 11. November 2009 Könntet ihr mir einen Lösungsvorschlag geben? Eine Klasse CIce schreiben, die als Member einen double-Wert für den Preis hat. Evtl. noch einen Namen. Wie leg ich fest, dass die Eingabe (1) zb Cornetto bedeutet und vor allem wie lasse ich das Programm wissen, dass Cornetto einen Betrag von 2.50€ entspricht?!?! 1. C++ Tutorial - if und else 2. s.o. Zitieren
chooter696 Geschrieben 11. November 2009 Geschrieben 11. November 2009 hallo, Erstmal ein paar sachen die mich sehr Wundern. Du hast mit c++ erst vor 2 wochen angefangen und ihr habt jetzt schon oop? Etwas kann da meiner meinung nach nicht stimmen. 2. wir sind ein hilfeboard bitte deine Ansätze des Quellcodes in einem Dafür vorgesehenen Codeblock einfügen Bsp: Code Block Zu deinen Problemen gibt es mehrere Möglichkeiten. Entweder du legst fest Das er z.b. für Capri die 1 eingeben soll oder er soll den Namen Eingeben. 1. Methode wäre einfacher für die Benutzung. Dann willst du dies mit if else abfrage oder mit Switch Case blöcken machen. Da du erst 2 wochen dabei bist würde ich dir if else empfehlen. Damit er mehrere Sorten gleichzeitig kaufen kann würde ich mir While schleifen angucken. Z.b. so: Vorab: int var; double PreisGesamt = 0; double Geld = 10.00; double Capri = 1.50; double Nogger = 1.80; double Cornetto = 2.50; 1. Frage welches Eis Auswahlmöglichkeit (1) Capri (2) Nogger (3) Cornetto 2. Abfrage wert in einer Var. speichern. 3. If else abfrage beginnen. wenn 1 dann in block eins gehen Bsp: if( var == 1 ) { Dann Ausrechnen} 4. Frage ob er noch mehr Eis kaufen möchte. Wenn ja wiederholen der schritte 1-4 bis diese Abfrage Negativ ausfällt 5. Ausgabe des Preises, Des Restgeldes 6. Programmende Zitieren
TDM Geschrieben 12. November 2009 Geschrieben 12. November 2009 4. Frage ob er noch mehr Eis kaufen möchte. Wenn ja wiederholen der schritte 1-4 bis diese Abfrage Negativ ausfällt Steht das so in der Aufgabenstellung?! Zitieren
tOm´ Geschrieben 12. November 2009 Autor Geschrieben 12. November 2009 Hallo, ich danke schonma für die zahlreichen Antworten. Laut Aufgabenstellung würde ich auch sagen es handelt sich fix nur um 2 Personen die Eis kaufen und ich muss nicht zwanghaft eine Schleife einfügen für mehrere Personen die evtl. Eis kaufen wollen. Ich werde in den nächsten Tagen versuchen so weit wie möglich zu kommen und mich dann nochmal hier melden wie es mir dabei erging Vielen Dank Zitieren
chooter696 Geschrieben 12. November 2009 Geschrieben 12. November 2009 @ TDM ich denke er soll für sich und sienen Freund ein Eis kaufen. Also für mich ergibt sich da shcon eine Schleife. Oder geht ihr zum Eiswagen bestellt ein Eis und kommt noch 5 min wieder um deinem Freund eins zu kaufen? Zitieren
TDM Geschrieben 12. November 2009 Geschrieben 12. November 2009 (bearbeitet) Zunächst wird der Kunde gefragt, welches Eis er wünscht. Das ist die Einzahl bei mir und es steht nirgendswo was von "Freunde kriegen auch Eis". So sehr ich zwar glaube, dass den Aufgabenstelle hier eine Schleife wünschenswert war, würde ich mich dennoch an die Aufgabenstellung halten.:floet: [Editerle] ahh, ok die Zeile Sie haben einen 10-€-Schein und wollen für sich und Ihren Freund je ein Eis kaufen. grad nochmal gesehen. Selbst da würd ich aber keine Schleife machen, sondern einfach den Kauf zweimal ansetzen. Bearbeitet 12. November 2009 von TDM Zitieren
tOm´ Geschrieben 16. November 2009 Autor Geschrieben 16. November 2009 #include<iostream> #include <string> using namespace std; class Eis {public: float Preis; float Wechselgeld; void start() { cout << "Willkommen bei Toms Eiswaren" << endl; cout << "Wir haben die Sorten Capri, Nogger und Cornetto zur Auswahl" << endl; cout << "Welches Eis möchten Sie kaufen?" << endl; } }; void benutzereingabe1() { cout << "Drücken Sie für Capri die (1), für Nogger die (2) und für Cornetto die (3)." << endl; cin >> wahl1; if(wahl1==1) { cout<<"Ok Sie haben sich für Capri entschieden"<<endl; } if(wahl1==2) { cout<<"Ok Sie haben sich für Nogger entschieden"<<endl; } if (wahl1==3) { cout<<"Ok Sie haben sich für Cornetto entschieden"<<endl; } } void benutzereingabe2() { cout << "Welches Eis möchte ihr Freund?" << endl; cin >> wahl2; if(wahl2==1) { cout<<"Ihr Freund möchte also Capri"<<endl; } if(wahl2==2) { cout<<"Ihr Freund möchte also Nogger"<<endl; } if (wahl2==3) { cout<<"Ihr Freund möchte also Cornetto"<<endl; } }; int main (){ Eis Capri; Capri.Preis = 1.5 Eis Nogger; Nogger.Preis = 1.8 Eis Cornetto; Cornetto.Preis = 2.5 start(); benutzereingabe1(); benutzereingabe2(); system ("PAUSE"); return 0; } Ich habe es jetzt mal bis zur Abfrage gemacht wer welches Eis will. Jedoch funktioniert es net und ich weiss auch nicht, ob es grundlegend richtig wäre. Sollte es grundlegend richtig sein, wie würde ich bei der Methode fürs Wechselgeld fortfahren?! Wieder mit "IF"? Also wenn "benutzereingabe1" den Wert "1" besitzt dann 10 minus den jeweiligen Wert fürs Eis oder wäre eine andere Lösung sinnvoller? Danke euch PS: Mir ist klar, dass auch die cout-Texte an sich noch abgeändert gehören aber ich möchte das Programm ma grundsätzlich zum laufen bekommen. Zitieren
TDM Geschrieben 17. November 2009 Geschrieben 17. November 2009 oder wäre eine andere Lösung sinnvoller? Ich habs mir mal als Frühmorgensaufgabe gesetzt: CIce.cpp: #include "stdafx.h" #include "Ice.h" using namespace std; void printGreeting(); const char* getUserRequest(); const char* getFriendRequest(); const CIce& chooseIce(CIce& ice1, CIce& ice2, CIce& ice3); int main(int argc, char* argv[]) { CIce capri("Capri", 1.5); CIce nogger("Nogger", 1.8); CIce cornetto("Cornetto", 2.5); double budget = 10.0; printGreeting(); cout << getUserRequest() << endl; CIce choosenIce = chooseIce(capri, nogger, cornetto); budget -= choosenIce.getPrice(); cout << getFriendRequest() << endl; choosenIce = chooseIce(capri, nogger, cornetto); budget -= choosenIce.getPrice(); cout << "Restgeld:\t" << budget; cin.get(); return 0; } void printGreeting() { cout << "Tach." << endl; } const char* getUserRequest() { return "Was willste?"; } const char* getFriendRequest() { return "Was will dein Freund?"; } const CIce& chooseIce(CIce& ice1, CIce& ice2, CIce& ice3) { cout << "1 = " << ice1.getName() << endl; cout << "2 = " << ice2.getName() << endl; cout << "3 = " << ice3.getName() << endl; int buffer = 0; cin >> buffer; switch(buffer) { case 1: return ice1; case 2: return ice2; case 3: return ice3; } } Ice.h #pragma once #include "stdafx.h" class CIce { private: std::string m_name; double m_price; public: CIce(std::string name, double price); virtual ~CIce(void); const std::string& getName(); double getPrice(); }; Ice.cpp: #include "StdAfx.h" #include "Ice.h" CIce::CIce(std::string name, double price) { this -> m_name = name; this -> m_price = price; } CIce::~CIce(void) { } const std::string& CIce::getName() { return m_name; } double CIce::getPrice() { return m_price; } stdafx.h: #pragma once #include <iostream> #include <string> Kannst dir ja ein, zwei Sachen abgucken. Sachen wie Benutzerfehleingaben usw. hab ich erstmal nicht berücksichtigt... :floet: Zitieren
tOm´ Geschrieben 17. November 2009 Autor Geschrieben 17. November 2009 #include<iostream> #include <string> using namespace std; #include <windows.h> float summe_rechnung; float budget=10; float preis_capri=1.50; float preis_nogger=1.80; float preis_cornetto=2.50; float wechselgeld; void start() { cout <<endl << "W I L L K O M M E N B E I T O M S E I S W A R E N !" << endl << endl; Sleep(1500); cout << "Wir haben die Sorten Capri, Nogger und Cornetto zur Auswahl." << endl; cout << "Welches Eis moechten Sie kaufen?" << endl; } void benutzereingabe1() { cout << "Druecken Sie fuer Capri die (1), fuer Nogger die (2) und fuer Cornetto die (3)." << endl; float wahl1; cin >> wahl1; if(wahl1==1) { cout<<"Ok Sie haben sich fuer Capri entschieden."<<endl; summe_rechnung=preis_capri; } if(wahl1==2) { cout<<"Ok Sie haben sich fuer Nogger entschieden."<<endl; summe_rechnung=preis_nogger; } if (wahl1==3) { cout<<"Ok Sie haben sich fuer Cornetto entschieden."<<endl; summe_rechnung=preis_cornetto; } } void benutzereingabe2() { Sleep(1000); cout <<endl << "Welches Eis moechte ihr Freund?" << endl; float wahl2; cin >> wahl2; if(wahl2==1) { cout<<"Ihr Freund moechte also Capri."<<endl<<endl; summe_rechnung=summe_rechnung+preis_capri; } if(wahl2==2) { cout<<"Ihr Freund moechte also Nogger."<<endl<<endl; summe_rechnung=summe_rechnung+preis_nogger; } if (wahl2==3) { cout<<"Ihr Freund moechte also Cornetto."<<endl<<endl; summe_rechnung=summe_rechnung+preis_cornetto; } } void summe_zahlung() { Sleep(500); cout << "Das macht dann zusammen " <<summe_rechnung << " Euro bitte." << endl; Sleep(1000); cout << "Vielen Dank für die 10.00 Euro" << endl<<endl; } void witz() { Sleep(1500); cout << "Kann ich Ihnen sonst noch irgendwie behilflich sein?" << endl; cout << "JA (1) NEIN (2)"<<endl; float auswahl_witz; cin >> auswahl_witz; if(auswahl_witz==1) { cout<<"Oh natuerlich Ihr Wechselgeld. Bitte entschuldigen Sie mich"<<endl; } if(auswahl_witz==2) { cout<<"Dann haetten Sie fast Ihr Wechselgeld vergessen ;)"<<endl<<endl; } } void wechselgeld_anzeigen() { wechselgeld=budget-summe_rechnung; cout << "Hier Ihr Wechselgeld ueber " << wechselgeld << " Euro."<< endl; } int main (){ start(); benutzereingabe1(); benutzereingabe2(); summe_zahlung(); witz(); wechselgeld_anzeigen(); system ("PAUSE"); return 0; } hoi nochma. zuerst: Vielen Dank für deinen Lösungsvorschlag ich weiss es sehr zu schätzen, dass du dafür deine Zeit geopfert hast. Jedoch muss ich sagen das es mir wenig gebracht hab, da ich deine Lösung nicht nachvollziehen kann Ich habe mich selbst nochmal hingesetzt und jetzt ein lauffähiges Programm geschaffen. Es macht das, was in der Aufgabenstellung verlangt wird! EINS JEDOCH NICHT! --> Es besitzt keine Klasse und ich weiss nicht was ich hier als Klasse definieren könnte bzw wie ich diese einbauen könnte. Gibt es eine Möglichkeit diese noch einzubauen und es umzuschreiben ohne viel Zeitaufwand? Zitieren
chooter696 Geschrieben 17. November 2009 Geschrieben 17. November 2009 he ja das geht ohne große umstände. Eine Klasse besteht einfach nur aus Attributen und Methoden Um eine Klasse benutzen zu können musst du 2 dateien erzeugen eine initialiesierungsdatei und eine zum arbeiten um es verständlich auszudrücken. eine standart Initiaisationsdatei (auch header genannt) sieht etwa so aus #ifndef KLASSE_H #define KLASSE_H dann deine biblotheken class Klassenname { private: public: KOnstruktor(); Destruktor(); }; #endif cpp datei dazu ist genau so simpel #include "Dateiname" Klassenname::Konstruktor(){} Klassenname::Destruktor(){} Zitieren
TDM Geschrieben 17. November 2009 Geschrieben 17. November 2009 Um eine Klasse benutzen zu können musst du 2 dateien erzeugen Kurz: Nö. Zitieren
chooter696 Geschrieben 17. November 2009 Geschrieben 17. November 2009 stimmt sorry. hab mich verleiten lassen auf die art die ich es mache. Und wie ich es übersichtlicher finde. Man kann dies natürlich alles in eine Datei schreiben. Zitieren
tOm´ Geschrieben 20. November 2009 Autor Geschrieben 20. November 2009 #include<iostream> #include <string> using namespace std; #include <windows.h> class eis {public: float preis_capri=1.50; float preis_nogger=1.80; float preis_cornetto=2.50; float summe_rechnung; int budget=10; float wechselgeld; int wahl1; int wahl2; int auswahl_witz; }; void eis :: start() { cout <<endl << "W I L L K O M M E N B E I T O M S E I S W A R E N !" << endl << endl; Sleep(1500); cout << "Wir haben die Sorten Capri, Nogger und Cornetto zur Auswahl." << endl; cout << "Welches Eis moechten Sie kaufen?" << endl; } void eis :: benutzereingabe1() { cout << "Druecken Sie fuer Capri die (1), fuer Nogger die (2) und fuer Cornetto die (3)." << endl; cin >> wahl1; if(wahl1==1) { cout<<"Ok Sie haben sich fuer Capri entschieden."<<endl; summe_rechnung=preis_capri; } if(wahl1==2) { cout<<"Ok Sie haben sich fuer Nogger entschieden."<<endl; summe_rechnung=preis_nogger; } if (wahl1==3) { cout<<"Ok Sie haben sich fuer Cornetto entschieden."<<endl; summe_rechnung=preis_cornetto; } } void eis :: benutzereingabe2() { Sleep(1000); cout <<endl << "Welches Eis moechte ihr Freund?" << endl; cin >> wahl2; if(wahl2==1) { cout<<"Ihr Freund moechte also Capri."<<endl<<endl; summe_rechnung=summe_rechnung+preis_capri; } if(wahl2==2) { cout<<"Ihr Freund moechte also Nogger."<<endl<<endl; summe_rechnung=summe_rechnung+preis_nogger; } if (wahl2==3) { cout<<"Ihr Freund moechte also Cornetto."<<endl<<endl; summe_rechnung=summe_rechnung+preis_cornetto; } } void :: summe_zahlung() { Sleep(500); cout << "Das macht dann zusammen " <<summe_rechnung << " Euro bitte." << endl; Sleep(1000); cout << "Vielen Dank fuer die 10.00 Euro" << endl<<endl; } void :: witz() { Sleep(1500); cout << "Kann ich Ihnen sonst noch irgendwie behilflich sein?" << endl; cout << "JA (1) NEIN (2)"<<endl; cin >> auswahl_witz; if(auswahl_witz==1) { cout<<"Oh natuerlich Ihr Wechselgeld. Bitte entschuldigen Sie mich."<<endl; } if(auswahl_witz==2) { cout<<"Dann haetten Sie fast Ihr Wechselgeld vergessen ;)"<<endl<<endl; } } void :: wechselgeld_anzeigen() { wechselgeld=budget-summe_rechnung; cout << "Hier Ihr Wechselgeld ueber " << wechselgeld << " Euro."<< endl; } int main (){ eis e1; e1. start(); e1. benutzereingabe1(); e1. benutzereingabe2(); e1. summe_zahlung(); e1. witz(); e1. wechselgeld_anzeigen(); system ("PAUSE"); return 0; } Ich hab jetzt nochmal versucht eine Klasse "eis" einzubauen. Jedoch sagt er mir beim copilen das nix deklariert is. Es ist der gleiche code wie oben im vorigen post von mir nur das ich die Methoden mit "eis::Methodenname" verknüpft hab und bei int main() die verknüpfung mit quasi mit eis.Methodenname ausführe. Aber bekomm jetzt unzählige Fehlermeldungen und ich weiss net warum. Was mache ich falsch? Das wäre mein wichtigsten Anliegen. Was ich noch gerne einbauen würde wäre ein Abfrage mit wieviel Euro der Kunde bezahlen möchte. Ist auch kein Problem es einzubauen aber ein Problem bekomm ich wenn er genau den zu bezahlenden Wert eingibt. Ich frag Ihn ja am schluss bei der Methoe "witz()" ob ich ihm noch weiterhelfen kann. Bei beiden Optionen spiele ich auf das wechselgeld an (was er ja bei genauer Bezahlung nicht bekommen würde). Dazu würde ich ne Methode einbauen die mit If abfragt, ob budget=summe_rechnung ist. wenn nein dann soll der witz() eben ausgeführt werden (so wie es jetzt auch ist). Wenn ja möchte ich die methode "witz()" überspringen. Wie kann ich am besten festlegen? Am wichtigsten ist mir aber der Einbau der Klasse eis. Auf die Eingabe des budget kann ich notfalls auch verzichten ist ja auch nicht unbedingt gefordert. Vielen Dank Zitieren
TDM Geschrieben 20. November 2009 Geschrieben 20. November 2009 Jedoch sagt er mir beim copilen das nix deklariert is. Es ist der gleiche code wie oben im vorigen post von mir nur das ich die Methoden mit "eis::Methodenname" verknüpft hab und bei int main() die verknüpfung mit quasi mit eis.Methodenname ausführe. Die Klassendeklaration ist ein Bauplan. class eis {public: float preis_capri=1.50; float preis_nogger=1.80; float preis_cornetto=2.50; float summe_rechnung; int budget=10; float wechselgeld; int wahl1; int wahl2; int auswahl_witz; }; Wo sind hier die Methoden? Zitieren
tOm´ Geschrieben 20. November 2009 Autor Geschrieben 20. November 2009 hab die falsche datei kopiert ^^ #include<iostream> #include <string> using namespace std; #include <windows.h> class eis { private: float preis_capri=1.50; float preis_nogger=1.80; float preis_cornetto=2.50; float summe_rechnung; int budget=10; float wechselgeld; int wahl1; int wahl2; int auswahl_witz; public: void start(); void benutzereingabe1(); void benutzereingabe2(); void summe_zahlung(); void witz(); void wechselgeld_anzeigen(); }; void eis :: start() { cout <<endl << "W I L L K O M M E N B E I T O M S E I S W A R E N !" << endl << endl; Sleep(1500); cout << "Wir haben die Sorten Capri, Nogger und Cornetto zur Auswahl." << endl; cout << "Welches Eis moechten Sie kaufen?" << endl; } void eis :: benutzereingabe1() { cout << "Druecken Sie fuer Capri die (1), fuer Nogger die (2) und fuer Cornetto die (3)." << endl; cin >> wahl1; if(wahl1==1) { cout<<"Ok Sie haben sich fuer Capri entschieden."<<endl; summe_rechnung=preis_capri; } if(wahl1==2) { cout<<"Ok Sie haben sich fuer Nogger entschieden."<<endl; summe_rechnung=preis_nogger; } if (wahl1==3) { cout<<"Ok Sie haben sich fuer Cornetto entschieden."<<endl; summe_rechnung=preis_cornetto; } } void eis :: benutzereingabe2() { Sleep(1000); cout <<endl << "Welches Eis moechte ihr Freund?" << endl; cin >> wahl2; if(wahl2==1) { cout<<"Ihr Freund moechte also Capri."<<endl<<endl; summe_rechnung=summe_rechnung+preis_capri; } if(wahl2==2) { cout<<"Ihr Freund moechte also Nogger."<<endl<<endl; summe_rechnung=summe_rechnung+preis_nogger; } if (wahl2==3) { cout<<"Ihr Freund moechte also Cornetto."<<endl<<endl; summe_rechnung=summe_rechnung+preis_cornetto; } } void eis :: summe_zahlung() { Sleep(500); cout << "Das macht dann zusammen " <<summe_rechnung << " Euro bitte." << endl; Sleep(1000); cout << "Vielen Dank fuer die 10.00 Euro" << endl<<endl; } void eis :: witz() { Sleep(1500); cout << "Kann ich Ihnen sonst noch irgendwie behilflich sein?" << endl; cout << "JA (1) NEIN (2)"<<endl; cin >> auswahl_witz; if(auswahl_witz==1) { cout<<"Oh natuerlich Ihr Wechselgeld. Bitte entschuldigen Sie mich."<<endl; } if(auswahl_witz==2) { cout<<"Dann haetten Sie fast Ihr Wechselgeld vergessen ;)"<<endl<<endl; } } void eis :: wechselgeld_anzeigen() { wechselgeld=budget-summe_rechnung; cout << "Hier Ihr Wechselgeld ueber " << wechselgeld << " Euro."<< endl; } int main (){ eis e1; e1. start(); e1. benutzereingabe1(); e1. benutzereingabe2(); e1. summe_zahlung(); e1. witz(); e1. wechselgeld_anzeigen(); system ("PAUSE"); return 0; } So ists richtig. Aber trotzdem hier die Fehlermeldung die ich bekomme: 10 C:\Users\tOm\Documents\löschen.cpp ISO C++ forbids initialization of member `preis_capri' 10 C:\Users\tOm\Documents\löschen.cpp making `preis_capri' static 10 C:\Users\tOm\Documents\löschen.cpp ISO C++ forbids in-class initialization of non-const static member `preis_capri' 11 C:\Users\tOm\Documents\löschen.cpp ISO C++ forbids initialization of member `preis_nogger' 11 C:\Users\tOm\Documents\löschen.cpp making `preis_nogger' static usw usw immer das gleiche. An was liegt das? Zitieren
tOm´ Geschrieben 20. November 2009 Autor Geschrieben 20. November 2009 ok wenn ich so beginne: { private: float summe_rechnung; float wechselgeld; int wahl1; int wahl2; int auswahl_witz; public: void start(); void benutzereingabe1(); void benutzereingabe2(); void summe_zahlung(); void witz(); void wechselgeld_anzeigen(); }; float preis_capri=1.5; float preis_nogger=1.8; float preis_cornetto=2.5; float budget=10; funktioniert es. Darf man also grundsätzlich in der geschweiften Klammer nach der Klasse keine fixen werte festlegen? Bzw ises jetzt so wie ichs hab üblich oder is das eher net objektorientiert? Zitieren
TDM Geschrieben 20. November 2009 Geschrieben 20. November 2009 Bzw ises jetzt so wie ichs hab üblich oder is das eher net objektorientiert? Nein. Ein (1!) Eis darf in dem Zusammenhang keine Sachen wie Wechselgeld besitzen. Da würde ja für jedes Eis einzeln das Wechselgeld gezählt werden, was du machen sollst (les ich so raus), ist, erst die Eisbestellungen aufgeben, und dann bezahlen (und Wechselgeld wieder bekommen). Du gehst ja auch nicht mit Freunden zum Eismann "Ich hätte gern ein Noggereis.", bezahlst, bekommst Wechselgeld, lässt deinen Freund bestellen und bezahlst nochmal mit dem Wechselgeld, dass du wieder Wechselgeld hast. Ergo: Erst Eis1 wählen lassen. Eis1.Preis von Budget abziehen. Eis2 wählen lassen. Eis2.Preis von Budget abziehen. (An der Stelle hast du dann bezahlt) Den Rest von Budget gibst du als Wechselgeld zurück. Wechselgeld, die Summe der Kosten oder irgendwelche Auswahlsachen haben aber nichts im Eis verloren. Zitieren
tOm´ Geschrieben 20. November 2009 Autor Geschrieben 20. November 2009 also muss ich im endeffekt nur die beiden Methoden void witz(); void wechselgeld_anzeigen(); von der Klasse Eis rausziehn und ohne Klasse defnieren? Oder ist es nicht gern gesehen Methoden oder ohne ne Klasse zu defnieren. Oder aber müsst ich mehr sachen umkrempeln um zu den gewünschten Objektorientieren Effekt zu kommen? Wenn das der Fall ist denk ich liegt es bei mir allein schon an den falsch gewählten Texten die ich verfasst habe oder? Zitieren
chooter696 Geschrieben 20. November 2009 Geschrieben 20. November 2009 { private: float summe_rechnung; float wechselgeld; int wahl1; int wahl2; int auswahl_witz; public: void start(); void benutzereingabe1(); void benutzereingabe2(); void summe_zahlung(); void witz(); void wechselgeld_anzeigen(); }; [COLOR="Red"]float preis_capri=1.5; float preis_nogger=1.8; float preis_cornetto=2.5; float budget=10;[/COLOR] das hier ist fölliger quatsch. eine header ist nur zur definition da nicht zur initialiesierung von werten. das macht man in der dazugehörigen cpp also nur definieren dann sieht das so aus header { private: float summe_rechnung; float wechselgeld; int wahl1; int wahl2; int auswahl_witz; float preis_capri; float preis_nogger; float preis_cornetto; float budget; public: void start(); void benutzereingabe1(); void benutzereingabe2(); void summe_zahlung(); void witz(); void wechselgeld_anzeigen(); }; cpp: Konstruktor: float preis_capri=1.5; float preis_nogger=1.8; float preis_cornetto=2.5; float budget=10; Zitieren
d3f3kt Geschrieben 4. Oktober 2011 Geschrieben 4. Oktober 2011 Auch wenn einwenig verspätet, aber ich habe mich auch mal drangesetzt, ist eher eine einfache simple Version, aber tja nu halt 20 minuten Produkt #include<iostream> #include<string> using namespace std; class iceshop { public: iceshop(); double get_money() const; void set_money( double ); void action(); private: double money; double capri; double nogger; double cornetto; int ammount; bool pay( int ); }; iceshop::iceshop() { money = 10.00; capri = 1.50; nogger = 1.80; cornetto = 2.50; ammount = 0; cout << "Willkommen in Lucis Eis laden!" << endl; cout << "Zur Zeit haben wir im Angebot: Capri für " << capri << "€, Nogger für " << nogger << "€ und Cornetto für " << cornetto << "€." << endl; } double iceshop::get_money() const { return money; } void iceshop::set_money( double new_money ) { money = new_money; } bool iceshop::pay( int choic ) { double money_buf; switch( choic ) { case 1: if( get_money() >= capri ) { cout << "Ein Capri gekauft" << endl; set_money( get_money() - capri ); cout << "Du hast noch " << get_money() << "€" << endl; }else { cout << "Nicht genügend Geld" << endl; } return true; break; case 2: if( get_money() >= nogger ) { cout << "Ein Nogger gekauft" << endl; set_money( get_money() - nogger ); cout << "Du hast noch " << get_money() << "€" << endl; }else { cout << "Nicht genügend Geld" << endl; } return true; break; case 3: if( get_money() >= cornetto ) { cout << "Ein Cornetto gekauft" << endl; cout << "Du hast noch " << get_money() << "€" << endl; set_money( get_money() - cornetto ); cout << "Du hast noch " << get_money() << "€" << endl; }else { cout << "Nicht genügend Geld" << endl; } return true; break; case 4: cout << "Good Bye" << endl << "Hier dein Rückgeld " << get_money() << "€" << endl; break; default: cout << "Falsche Eingabe" << endl; return true; break; } } void iceshop::action() { int choic = 0; while( true ) { cout << "Bitte wähle: (1)Capri, (2)Nogger, (3)Cornetto, (4)Rückgeld anfordern" << endl; cout << "Wahl:"; cin >> choic; if( pay( choic ) == false ) { break; } } } int main() { iceshop Luci; cout << "Du hast " << Luci.get_money() << "€ zur Verfügung" << endl; Luci.action(); return 0; } 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.