Geschrieben von Rinilein am 04.10.2006 um 21:17:
NEUES PROBLEM:
wenn ich fuer die wahl des schiffes die 1 eingebe und danach die daten von schiff 1 sehen moechte, zeigt er mir die daten von schiff 0 ein und das macht er bei jeder eingabe.
WO LIEGT DER FEHLER?
____________________________________________________
#include <iostream>
#include <stdlib.h>
using namespace std;
class containerSchiff
{
private:
int standOrt[3];
int anzahlContainer[3];
int kapazitaetContainer[3];
int schiff[3];
float preis_je_container[3];
float gesamtUmsatz;
public:
containerSchiff();
~containerSchiff();
void zeige_containerSchiff();
void veraendere_containerSchiff();
void belade_containerSchiff();
void entlade_containerSchiff();
void fahre_containerSchiff();
void gebeStandOrt();
};
//-------------------------------------------------------------------------
-----
//Hauptprogramm
int main(void)
{
containerSchiff container1;
char wahl;
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')
{
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.zeige_containerSchiff();break;
case '2': container1.veraendere_containerSchiff();break;
case '3': container1.belade_containerSchiff();break;
case '4': container1.entlade_containerSchiff();break;
case '5': container1.fahre_containerSchiff();break;
case '6': container1.gebeStandOrt();break;
case 'E': system("PAUSE");
return 0;
default: cout<<"Falsche Eingabe"<<endl;
}
}
system("PAUSE");
return 0;
}//Ende Hauptprorgamm
//-------------------------------------------------------------------------
-----
//Implementation der Elemente
containerSchiff::containerSchiff()
{
int i;
for(i=0;i<3;i++)
{
cout<<"Definieren Sie ihr Schiff"<<endl;
cout<<"Schiff["<<i<<"]"<<endl;
cout<<"Standort: ";
cin>>standOrt[i];
cout<<"Anzahl Container: ";
cin>>anzahlContainer[i];
cout<<"Kapazitaet Container: ";
cin>>kapazitaetContainer[i];
cout<<"Preis je Container: ";
cin>>preis_je_container[i];
}
for(i=0;i<3;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;
}
}
//-------------------------------------------------------------------------
-----
containerSchiff::~containerSchiff()
{
cout<<"Destruktor"<<endl;
}
//-------------------------------------------------------------------------
-----
void containerSchiff::zeige_containerSchiff()
{
float gesamtUmsatz=0;
int 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;
}
//-------------------------------------------------------------------------
-----
void containerSchiff::veraendere_containerSchiff()
{
int i;
cout<<"Standort: ";
cin>>standOrt[i];
cout<<"Anzahl Container: ";
cin>>anzahlContainer[i];
cout<<"Kapazitaet Container: ";
cin>>kapazitaetContainer[i];
cout<<"Preis je Container: ";
cin>>preis_je_container[i];
}
//-------------------------------------------------------------------------
-----
void containerSchiff::belade_containerSchiff()
{
int zuladung_container;
int i;
if (kapazitaetContainer>anzahlContainer)
{
cout<<"Wieviel Container sollen auf das Schiff geladen werden?";
cin>>zuladung_container;
anzahlContainer[i]=anzahlContainer[i]+zuladung_container;
}
}
//-------------------------------------------------------------------------
-----
void containerSchiff::entlade_containerSchiff()
{
int abladung_container;
float gesamtUmsatz=0;
int i;
cout<<"Wieviel Container sollen vom Schiff geladen werden?";
cin>>abladung_container;
anzahlContainer[i]=anzahlContainer[i]-abladung_container;
gesamtUmsatz=gesamtUmsatz+(abladung_container*preis_je_container[i]);
}
//-------------------------------------------------------------------------
-----
void containerSchiff::fahre_containerSchiff()
{
if (anzahlContainer<0)
{
cout<<"Das Schiff ist fahrbereit."<<endl;
}
else
{
cout<<"Das Schiff ist nicht fahrbereit."<<endl;
}
}
//-------------------------------------------------------------------------
-----
void containerSchiff::gebeStandOrt()
{
cout<<"Standort: "<<standOrt<<endl;
}
//-------------------------------------------------------------------------
-----
Geschrieben von Riff am 08.02.2007 um 19:42:
lokale Variable
Folgendes Problem ist bei deinem Programm:
Am Anfang der main-Funktion deklarierst du die nötigen variablen. Du fragst dann ab, welcher container bearbeitet werden soll und dann, was du mit diesem Container machen willst. So weit so gut. Per switch-case wählst du die abzuarbeitende Funktion aus. Hier ist der Fehler: Das Schiff, welches du ausgewählt hast, ist der abzuarbeitenden Funktion nicht bekannt, da du diesen Parameter nicht übergibst. Daher kannst du die Parameter des ausgewählten schiffes nicht bearbeiten und daher nicht bekannt. Dass schiff 0 ausgegeben wird, hängt damit zusammen, dass du in den abzuarbeitenden Funktionen lokale Variablen deklariert hast, die wahrscheinlich die Parameter der Schiffe beinhalten sollen. Sie sind aber auf 0 gesetzt.
siehe:
void containerSchiff::veraendere_containerSchiff()
{
int i; //
lokale Definition-> LOKAL GEHT VOR GLOBAL
// i hat den Wert 0
;
cout<<"Standort: ";
cin>>standOrt[i];
cout<<"Anzahl Container: ";
cin>>anzahlContainer[i];
cout<<"Kapazitaet Container: ";
cin>>kapazitaetContainer[i];
cout<<"Preis je Container: ";
cin>>preis_je_container[i];
}
Noch mal zur Erinnerung:
Lokal geht vor global !!!
Funktionskopf müsste ungefähr so aussehen, um Paramter zu erhalten (int i-Deklaration im Funktionskörper kannst du dann entfernen):
void containerSchiff::veraendere_containerSchiff(int i)