C++
-
ich poste ihn so, wie wir das gelernt haben, meine guete.
ICH VERSTEHE DEN FEHLER NICHT, WIE OFT DENN NOCH?
-
Rinilein schrieb:
ICH VERSTEHE DEN FEHLER NICHT, WIE OFT DENN NOCH?

Welchen Fehler?
mfg.
-
Rinilein schrieb:
ich poste ihn so, wie wir das gelernt haben, meine guete.
ICH VERSTEHE DEN FEHLER NICHT, WIE OFT DENN NOCH?
Du erstellt immer wieder in deinen Funktionen ein neues i (mit dem wert 0) welches du dann benutzt um auf deine Daten zuzugreifen.
{ float gesamtUmsatz=0; int i; // vermutlich soll hier das i aus main verwendet werden - das hier ist aber ein anderes i cout<<"--------------------------------------"<<endl; cout<<"Schiff:..............["<<i<<"]"<<endl; cout<<"Standort: "<<standOrt[i]<<endl; cout<<"Anzahl Container: "<<anzahlContainer[i]<<endl; cout<<"Kapazitaet Container: "<<kapazitaetContainer[i]<<endl; cout<<"Preis je Container: "<<preis_je_container[i]<<endl; cout<<"Gesamtumsatz:........."<<gesamtUmsatz<<endl; cout<<"--------------------------------------"<<endl; }Das Problem könnte behoben werden, wenn du das "int i;" aus deinen Funktionen entfernst, und einmal i als globale Variable angibst. Dies ist aber keine gute Lösung, besser wäre es i als Parameter deinen Funktionen zu übergeben
Edit:
Es wäre hilfreich, wenn du dir das Kapitel in deinem c++ Buch über Gültigkeitsbereich und Lebensdauer von Variablen noch mal durchliest.hier noch mal das wichtigste:
int i: eine Variable wird erzeugt und Speicher dafür reserviert (kann so viel ich weiß alle möglichen stertwerte haben ist zufällig, aber meist 0.
eine zwischen zwei {} geschweiften Klammern erschaffene Variabe existiert auch nur da, danach ist sie wieder gelöscht und auch in den Funktionen, die von da auf aufgerufen werden ist sie nicht verfügbar.
und jetzt versuch mal die Ausgabe des folgenden Programms zu erklären.
int main (void){ int i = 0; { int i = 1; cout << i << endl; } cout << i << endl; }
-
koenntest du mir viell. das ganze programm ohne die ganzen i's funktionsfaehig erstellen? waere wirklich nett, ich komm da gar nicht mehr klar.
-
Rinilein schrieb:
ich kann c++, zwar nicht immer alles perfekt, aber wir haben es so gelernt.
Das halte ich, mit Verlaub gesagt, für eine gewagte Behauptung angesichts der Tatsache dass Du mit der Gültigkeitsdauer von Variablen offenbar nichts anfangen kannst. Selbst nach mehreren expliziten Hinweisen nicht.
Ergänzend zu Krux' Post: Noch besser wäre es natürlich, in einem Objekt vom Typ "containerSchiff" nicht die Daten von offenbar drei Schiffen zu speichern. Erstelle ein Array von containerSchiff in main(), dann hast Du das Problem i übergeben zu müssen garnicht.
Wenn das morgen noch keiner gemacht hat und ich ne ruhige Minute habe könnt ich wohl mal eine korrigierte Version zusammenstellen. Im Moment ruft das Bett nach mir

-
Rinilein schrieb:
koenntest du mir viell. das ganze programm ohne die ganzen i's funktionsfaehig erstellen? waere wirklich nett, ich komm da gar nicht mehr klar.
Quellcode schreiben musst du schon noch selbst, aber lass doch mal ne suche nach allen "int i;" laufen, und lösche sie, dann packst du int i; vor dein main, dann hast du zwar ne globale Variable (globale variablen sind böse genau wie goto), aber es müsste funktionieren
PS hast du mein letzten Edit des vorherigen Posts von mir gelesen?
-
ich versteh grad nur bahnhof, zudem bin ich grad total verzweifelt.
ich versteh das mit den i's nicht, mensch.
es ist schon spaet und das ist hausaufgabe bis morgen.. ich sitz da schon mind. 6 stunden dran.
ich schreib naechste woche ne arbeit ueber dieses thema. hallejulia.@der, der so tolle sprueche klopft
du hast wirtschaftsinformatik viell. studiert, also fuehr dich hier nciht wie den tollsten auf, denn der bist du nicht.

-
Rinilein schrieb:
ich versteh grad nur bahnhof, zudem bin ich grad total verzweifelt.
ich versteh das mit den i's nicht, mensch.
es ist schon spaet und das ist hausaufgabe bis morgen.. ich sitz da schon mind. 6 stunden dran.
ich schreib naechste woche ne arbeit ueber dieses thema. hallejulia.@der, der so tolle sprueche klopft
du hast wirtschaftsinformatik viell. studiert, also fuehr dich hier nciht wie den tollsten auf, denn der bist du nicht.

Ich hab ferien

aber hast glück, Info ist mein bestes fach zur zeit und ich bin von Natur aus hilfsbereit.Ich bastel dann mal.
-
vielen dank

aber nicht mit dem int i; vor dem main, weil das hatten wir noch nicht, wir hatten diese uebergabeparameter bei klassen auch noch nicht.
das muss doch auch irgendwie anders gehen?
-
Rinilein schrieb:
ich sitz da schon mind. 6 stunden dran.
Ich glaub eher du hast gerade angefangen und stehst nun unter Zeitdruck

Ich rate dir mal im Unttericht besser und konzentrierter aufzupassen. Denn ihr bekommt sicherlich nicht etwas auf, was ihr nicht hättet lösen können.
-
Krux?

wo bleibt die antwort
-
#include <iostream> #include <stdlib.h> // Heisst in C++ cstdlib, nicht stdlib.h using namespace std; class containerSchiff { private: int standOrt; int anzahlContainer; int kapazitaetContainer; int schiff; float preis_je_container; float gesamtUmsatz; public: containerSchiff(); ~containerSchiff(); void zeige(); void veraendere(); void belade(); void entlade(); void fahre(); int gebeStandOrt(); }; //------------------------------------------------------------------------------ //Hauptprogramm int main(void) { containerSchiff container1[3]; char wahl; /* Wozu sollen diese Variablen gut sein? int schiff[3]; int standOrt[3]; int anzahlContainer[3]; int kapazitaetContainer[3]; float preis_je_container[3]; */ int i; cout<<endl; cout<<"Welches Schiff wollen sie bearbeiten?"; cin>>i; cout<<endl; while (wahl!='E') // In wahl wurde noch nichts eingelesen, hier steht etwas zufälliges drin { cout<<endl; cout<<"Auswahl"<<endl; cout<<"========"<<endl; cout<<"Containerschiff zeigen......1"<<endl; cout<<"Containerschiff veraendern..2"<<endl; cout<<"Containerschiff beladen.....3"<<endl; cout<<"Containerschiff entladen....4"<<endl; cout<<"Containerschiff fahren......5"<<endl; cout<<"Standort geben..............6"<<endl; cout<<"Ende........................E"<<endl; cout<<"Wahl.......................:"; cin>>wahl; switch (wahl) { case '1': container1[i].zeige(); break; case '2': container1[i].veraendere(); break; case '3': container1[i].belade(); break; case '4': container1[i].entlade(); break; case '5': container1[i].fahre(); break; case '6': container1[i].gebeStandOrt(); break; default: system("PAUSE"); return 0; // jede Eingabe ausser 1-6 soll das Programm beenden? } } system("PAUSE"); return 0; }//Ende Hauptprorgamm //------------------------------------------------------------------------------ //Implementation der Elemente containerSchiff::containerSchiff(){ cout<<"Definieren Sie ihr Schiff"<<endl; cout<<"Schiff"<<endl; cout<<"Standort: "; cin>>standOrt; cout<<"Anzahl Container: "; cin>>anzahlContainer; cout<<"Kapazitaet Container: "; cin>>kapazitaetContainer; cout<<"Preis je Container: "; cin>>preis_je_container; cout<<"--------------------------------------"<<endl; cout<<"Schiff:.....Name waere nich schlecht nich wahr"<<endl; cout<<"Standort:.............."<<standOrt<<endl; cout<<"Anzahl Container:......"<<anzahlContainer<<endl; cout<<"Kapazitaet Container:.."<<kapazitaetContainer<<endl; cout<<"Preis je Container:...."<<preis_je_container<<endl; cout<<"Gesamtumsatz:.........."<<gesamtUmsatz<<endl; cout<<"--------------------------------------"<<endl; } //------------------------------------------------------------------------------ containerSchiff::~containerSchiff() { cout<<"Destruktor"<<endl; } //------------------------------------------------------------------------------ void containerSchiff::zeige() { float gesamtUmsatz=0; cout<<"--------------------------------------"<<endl; cout<<"Schiff:..............[]"<<endl; cout<<"Standort: "<<standOrt<<endl; cout<<"Anzahl Container: "<<anzahlContainer<<endl; cout<<"Kapazitaet Container: "<<kapazitaetContainer<<endl; cout<<"Preis je Container: "<<preis_je_container<<endl; cout<<"Gesamtumsatz:........."<<gesamtUmsatz<<endl; cout<<"--------------------------------------"<<endl; } //------------------------------------------------------------------------------ void containerSchiff::veraendere() { cout<<"Standort: "; cin>>standOrt; cout<<"Anzahl Container: "; cin>>anzahlContainer; cout<<"Kapazitaet Container: "; cin>>kapazitaetContainer; cout<<"Preis je Container: "; cin>>preis_je_container; } //------------------------------------------------------------------------------ void containerSchiff::belade() { int zuladung_container; int i; // siehe oben if (kapazitaetContainer>anzahlContainer) { cout<<"Wieviel Container sollen auf das Schiff geladen werden?"; cin>>zuladung_container; anzahlContainer += zuladung_container; } } //------------------------------------------------------------------------------ void containerSchiff::entlade() { int abladung_container; cout<<"Wieviel Container sollen vom Schiff geladen werden?"; cin>>abladung_container; anzahlContainer -= abladung_container; gesamtUmsatz += abladung_container*preis_je_container; } //------------------------------------------------------------------------------ void containerSchiff::fahre() { if (anzahlContainer<0) // nur wenn weniger als 1 container an bord ist ist das schiff Fahrbereit { cout<<"Das Schiff ist fahrbereit."<<endl; } else { cout<<"Das Schiff ist nicht fahrbereit."<<endl; } } //------------------------------------------------------------------------------ int containerSchiff::gebeStandOrt() { cout<<"Standort: "<<standOrt<<endl; return standOrt; //den Returnwert nicht vergessen, sonst kann man mit dem Wert im Programm nichts anfangen; } //------------------------------------------------------------------------------Ich hab einiges verändert, und schau dir mal an, wo das i ist, nur noch im Haupstprogramm.
Du hattest eine klasse erstellt, die sich schiff gernannt hat, und dafon ein Objekt erstellt. Dieses objekt hatte den Inhalt von genau 3 Schiffen, was irgendwie ziemlich bescheuert ist.
Ich hab das so verändert, dass du 3 Objekte erstellst, die jeweils die Informationen von einem Schiff enthalten. Jetz ist das i in deinen Methoden auch völlig überflüssig geworden. Ich hoffe du verstehst jetzt auch mal wofür klassen da sind.
-
also 1. wieso return (standOrt)?
wieso soll der an die hauptfunktion zurueckgegeben werden? in der hauptfunktion steht doch nirgends der standort?
2. soll da ueberall das i sein. ich hab nen screenshot, wie das programm aussehen soll.
wie kann ich das hier einfuegen?
er zeigt bie mir auch bei dem <1, was du meintest, was richtig waere fehlermeinung und die rueckgabe des standOrtes macht er auch als fehler.der anfang des programmes ist:
definieren sie das schiff:
schiff[0]
alle eingaben
.
.
.
schiff[1]
alle eingaben
.
.
.
schiff[2]0 1 2 sind das i!!!!!!!!
das sollen wir so machen
danach kommt die aus ausgabe von [0] [1] [2] mit ihren eingaben, und danach kommt die fragen, welches schiff ich auswaehlen moechte, dann geb ich die 1 an, dann kommt das auswahlmenue, was ich mit dem ding machen will, dann geb ich 1 ein fuer daten anzeigen von schiff 1, was ich ja ausgewaehlt hab und dann zeigt er mir die daten von schiff [0] an.das ist das problem!!!!
und es muss das i da sein, das is die schiffsbezeichnung!!

-
Rinilein schrieb:
also 1. wieso return (standOrt)?
wieso soll der an die hauptfunktion zurueckgegeben werden? in der hauptfunktion steht doch nirgends der standort?
2. soll da ueberall das i sein. ich hab nen screenshot, wie das programm aussehen soll.
wie kann ich das hier einfuegen?
er zeigt bie mir auch bei dem <1, was du meintest, was richtig waere fehlermeinung und die rueckgabe des standOrtes macht er auch als fehler.der anfang des programmes ist:
definieren sie das schiff:
schiff[0]
alle eingaben
.
.
.
schiff[1]
alle eingaben
.
.
.
schiff[2]0 1 2 sind das i!!!!!!!!
das sollen wir so machen
danach kommt die aus ausgabe von [0] [1] [2] mit ihren eingaben, und danach kommt die fragen, welches schiff ich auswaehlen moechte, dann geb ich die 1 an, dann kommt das auswahlmenue, was ich mit dem ding machen will, dann geb ich 1 ein fuer daten anzeigen von schiff 1, was ich ja ausgewaehlt hab und dann zeigt er mir die daten von schiff [0] an.das ist das problem!!!!
und es muss das i da sein, das is die schiffsbezeichnung!!

return, nicht weils benutzt wird, sondern die Methode hat doch ein int davor, was bedeutet, dass auch einer zurückgegeben werden soll, ob du ihn benutzt oder nicht ist egal aber ohne ist doof, dann kanste auch gleich ne Void draus machen, aber das zurückzugeben ist fast noch wichtiger, als das zu schreiben. am besten wäre es, wenn du aus der Methode das cot ausbaust, und nur das return drin lässt, und statt dessen cout << container1[i].gebeStandort() << endl; ins main reinpackst, aber das ist jetzt nicht so wichtig.
um dein Problem zu lösen lösche einfach Zeile 112-121 und packe ein
for (int j = 0; j < 0; j++){
cout << "schiff[" << i << ']' << endl;
container1[j]zeige();
}zwischen zeile 30/31
Dann wäre ersmal die Reihenfolge wieder hergestellt.
Edit habs verändert, und den Rest schaffst selbst du. (Einfach danach kompilieren und testen. Danach gucken was passt.)
-
naja, ich bekomm wohl keine antwort mehr.
-
ich hab langsam das gefuehl, dass mir hier keiner helfen will, sondern ihr mich fuer bloede haltet.
diese erklaerungen bringen mich kein stueck weiter ans ziel.
das sa schiff [0] statt schiff [1] steht hat keineswegs mit dem destruktor zutun, also werde ich den auch nicht loeschen.
mir reichts jetzt. ich lass es so. ich hab mir wirklich mehr als genug gedanken darueber gemacht.
-
Rinilein schrieb:
naja, ich bekomm wohl keine antwort mehr.
doch
-
Rinilein schrieb:
ich hab langsam das gefuehl, dass mir hier keiner helfen will, sondern ihr mich fuer bloede haltet.
diese erklaerungen bringen mich kein stueck weiter ans ziel.
das sa schiff [0] statt schiff [1] steht hat keineswegs mit dem destruktor zutun, also werde ich den auch nicht loeschen.
mir reichts jetzt. ich lass es so. ich hab mir wirklich mehr als genug gedanken darueber gemacht.der index geht nunmal von 0-2 wenn du aber 1-3 da stehen haben willst, musst du einfach statt i i+1 ausgeben lassen. Und nein ich halte dich nicht für dumm, sondern hab mitlerweile mitbekommen das du ein Anfanger bist, der mit dem Problem nicht klar kommt, und unter Zeitdruck steht, sonst hätte ich die auch nicht so auffürlich dein Programm berichtigt. Und das mit dem Destruktor ha auch keiner behauptet, aber der Destruktor ist in deinem Programm überflssig, das heißt, dass du ihn besser gleich löschen solltest, aber da du ja bereits schon aufgehört hast, kann ich dir leider nicht weiterhelfen.
-
Rinilein schrieb:
ich hab langsam das gefuehl, dass mir hier keiner helfen will, sondern ihr mich fuer bloede haltet.
Oh mein Gott ...
Hier sind Leute die sich mit deinem Problem beschftigen und dir versuchen zu helfen und du meinst immer noch es hilft dir keiner.Ich habe langsam das Gefühl das du dir nicht helfen lassen willst. Hier kann dir auch keiner die ganze Sprache C++ beibringen. Gewisse Sachen solltest du schon wissen oder selbst mitbringen.
-
Freak-Coder ich hab seit einem Jahr C++, das ist der Schwerpunkt.
Als spiel dich hier nicht so auf du Volltrottel.
Mag sein, dass du mehr Ahnung von C++ hast, dafuer habe ich wenigstens Charakter im Gegensatz zu dir._________________________________
Ich frage morgen meinen Lehrer, den es sowieso nicht interessiert, was wir fuer Probleme haben, aber ich werd das auch durch nen anderen Weg erfahren.