Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi leute,

und zwar hab ich folgendes Problem. Wir haben in der Schule nen Code bekommen den wir zur Übung fertigstellen durften. Nun war der Lehrer ne lange Zeit krank und die Aufgabe ist in Vergessenheit geraten. Jetzt hatte ich mir vor paar tagen vorgenommen diese Aufgabe zur Übung zu lösen. Leider hab ich es nach langem herumprobieren nicht auf die Reihe bekommen und wäre jetzt um jede Hilfe dankbar, denn nun will ich unbedingt die Lösung haben. Theoretisch könnte ich es auf eine andere Weise irgendwie funktionsfähig machen, würde aber gerne wissen wie eine Lösung mit dem vorgegebenen Code realisierbar ist.

Bei dem Programm handelt es sich um eine Parkhaussimulation, bei dem ich mit der noch fehlenden Funktion "schaltePfeile" nicht zurecht komme.

Die Pfeile sollen so geschaltet werden, dass ein Kraffahrzeug zu dem von der Einfahrt her entferntesten freien Parkplatz geleitet wird.


//-------Park Haus Leitsystem --ok-------------------------------------------

//---------------------------------------------------------------------------


#include <iostream.h>

#include <conio.h>


//Prototypen

void zeichneParkhaus(void);

int suchefreieEtage(void);

int suchefreienParkplatz(int);

void einausfahrt(bool);

void schaltePfeile(int, int);


// Globale Datendefinition

bool ab_parkhaus[3][10]

= {{0,0,0,0,0,0,0,0,0,0},

   {0,0,0,0,0,0,0,0,0,0},

   {0,0,0,0,0,0,0,0,0,0}};


bool bfrei;

int ietage, iparkplatz;


bool bpfeillinks0, bpfeilgeradeaus0, bpfeilrechts0;

bool bpfeillinks1, bpfeilgeradeaus1, bpfeilrechts1;

bool bpfeillinks2, bpfeilgeradeaus2, bpfeilrechts2;



//Hauptprogramm

int main(int argc, char* argv[])

{

 do

 {

   bfrei= (suchefreieEtage()+1);

   if (bfrei)

   {

    ietage=suchefreieEtage();

    iparkplatz=suchefreienParkplatz(ietage);

    schaltePfeile(ietage, iparkplatz);

    zeichneParkhaus();

    einausfahrt(1);

    clrscr();

    }

    else

    {

    cout << "Parkhaus gesperrt!!!"<<endl;

    einausfahrt(0);

    }


 }

 while(1);


return 0;

}




//---------------------------------------------------------------------------

// Funktionsdefinitionen


void zeichneParkhaus(void)

{


  cout << "-----------------------------------------"<<endl;

  for (int i=2; i>=0; i--)

  {


      // Ausgabe linke Etage

      for (int j=0; j <=4 ;j++)

      {

          if(ab_parkhaus[i][j]==1)

          {

              cout << " 1 ";

          }

          else

          {

               cout << " 0 ";

          }

       }


         //Ausgabe Pfeile

       switch (i)

       {


       case 0:


       if (bpfeillinks0==1){ cout << "<--";} else  { cout << "   ";}

       if (bpfeilgeradeaus0==1){ cout << " ^ ";} else  { cout << "   ";}

       if (bpfeilrechts0==1){ cout << "-->";} else  { cout << "   ";}

       break;


       case 1:



       if (bpfeillinks1==1){ cout << "<--";} else  { cout << "   ";}

       if (bpfeilgeradeaus1==1){ cout << " ^ ";} else  { cout << "   ";}

       if (bpfeilrechts1==1){ cout << "-->";} else  { cout << "   ";}

       break;


       case 2:


       if (bpfeillinks2==1){ cout << "<--";} else  { cout << "   ";}

       if (bpfeilgeradeaus2==1){ cout << " ^ ";} else  { cout << "   ";}

       if (bpfeilrechts2==1){ cout << "-->";} else  { cout << "   ";}

       break;

       }




       // Ausgabe rechte Etage0

       for (int j=5; j <=9 ;j++)

       {

          if(ab_parkhaus[i][j]==1)

          {

              cout << " 1 ";

          }

          else

          {

               cout << " 0 ";

          }

        }

        cout << endl;

  }

     cout << "-----------------------------------------" <<endl;;

}


int suchefreieEtage(void)

{

 for(int i=2;i>=0;i--)

 {

     for(int j=0;j<=9;j++)

     {

        if(ab_parkhaus[i][j]==0)

        {

          ietage = i;

          return ietage;

        }



     }

 }

   return(-1);

}


int suchefreienParkplatz(int iEtagenNr)

{

    for(int j=0;0<=4;j++)

     {

       if(ab_parkhaus[iEtagenNr][j]==0)

        {

          return j;

        }


        else if(ab_parkhaus[iEtagenNr][9-j]==0)

        {

          return 9-j;

        }

     }



   return(-1);

}




void einausfahrt(bool bfrei)

{

   char ceingabe;

   int i, j;



   if (bfrei)

   {

     cout << "Einfahrt oder Ausfahrt (e/a)?" ;

     cin >> ceingabe;

     cout << endl;

     switch (ceingabe)

     {

     case 'e':

             cout<< "In welche Etage fahren Sie (0-2)?";

             cin >> i; cout << endl;

             cout<< "In welche Box fahren Sie (0-9)?";

             cin >> j; cout << endl;



             if ((i>=0)&&(i<=2)&&(j>=0)&&(j<=9))

             {

                 if (ab_parkhaus[i][j]==0)

                 {

                     ab_parkhaus[i][j]=1;

                 }

                 else

                 {

                     cout << "Parkplatz schon belegt";

                     getchar();

                 }

             }

             else

             {

                 cout<< "Fehlerhafte Eingabe";

             }

        break;


        case 'a':

             cout<< "Welchen Parkplatz möchten Sie verlassen?" << endl;

             cout<< "Etage (0-2)?";

             cin >> i; cout << endl;

             cout<< "Box (0-9)?";

             cin >> j; cout << endl;



             if ((i>=0)&&(i<=2)&&(j>=0)&&(j<=9))

             {

                 if (ab_parkhaus[i][j]==1)

                 {

                     ab_parkhaus[i][j]=0;

                 }

                 else

                 {

                     cout << "Parkplatz ist ncoh frei";

                 }

             }

             else

             {

                 cout<< "Fehlerhafte Eingabe";

             }


        };

   }

   else

   {

    cout<< "Welchen Parkplatz möchten Sie verlassen?" << endl;

    cout<< "Etage (0-2)?";

    cin >> i; cout << endl;

    cout<< "Box (0-9)?";

    cin >> j; cout << endl;



   if ((i>=0)&&(i<=2)&&(j>=0)&&(j<=9))

   {

       if (ab_parkhaus[i][j]==1)

       {

           ab_parkhaus[i][j]=0;

       }

       else

       {

           cout << "Parkplatz ist noch frei";

       }

   }

   else

   {

        cout<< "Fehlerhafte Eingabe";

   }


   }



}


void schaltePfeile(int iEtagennr, int iParkplatznr)

{

 if (iParkplatznr <5)

 {  

    if(iEtagennr == 2)

    {

    bool bpfeillinks2 = 1;

    }


    else if(iEtagennr == 1)

    {


    bool bpfeillinks1 = 1;

    }


    else if(iEtagennr == 0)

    {

     bool bpfeillinks0 = 1;

    }

 }


 else

  {

    if(iEtagennr == 2)

    {

     bool bpfeilrechts2 = 1;

    }


    else if(iEtagennr == 1)

    {

     bool bpfeilrechts1 = 1;

    }


    else if(iEtagennr == 0)

    {

     bool bpfeilrechts0 = 1;

    }


  }


 // Rücksetzen der Pfeile

 //Schalten der Pfeile

}


Ich hoffe das alles einigermaßen verständlich war und bedanke mich schon einmal für eure Mühe.

MFG

Invisi09

Geschrieben
Bei dem Programm handelt es sich um eine Parkhaussimulation, bei dem ich mit der noch fehlenden Funktion "schaltePfeile" nicht zurecht komme.
Und das heißt konkret?

Die Pfeile sollen so geschaltet werden, dass ein Kraffahrzeug zu dem von der Einfahrt her entferntesten freien Parkplatz geleitet wird.
Wie ist das Parkhaus aufgebaut? Wo ist die Einfahrt überhaupt?

Was bedeuten die einzelnen Pfeile?

Wie bemisst sich die Entfernung von der Einfahrt?

Hier fehlen wichtige Informationen.

Geschrieben

Wenn man das jetztige programm ausführt sieht man zwei spalten mit Nullen.

In der Mitte unten soll die Einfahrt darstellen. Jede 0er Zeile soll eine Etage darstellen. Die Oberste Zeile ist somit die 2te Etage und die unterste die 0te Etage. Die Parkplatznummer bei jeder Etage von links nach rechts gezählt (0 bis 9). Die Pfeile sollen in der mitte angezeigt werden.

Danke fürs Feedback, ich hoffe das jetzt einiges klarer ist.

Geschrieben

Wenn das Auto z. B. in die 2te Etage auf die Parkplatznr. 8 soll, dann müsste in der 1ten 0er Zeile in der Mitte ein Pfeil nach rechts, in der 2ten und 3ten 0er Zeile in der Mitte jeweils ein gerader Pfeil angezeigt werden.

Würde man die 2te Etage durch die 0te Etage ersetzen würde ein rechter Pfeil in der 3ten 0er Zeile in der Mitte reichen.

Hab selbst lange herumgekrübelt wie das mit den Pfeilen genau dargestellt werden soll, aber nach langem überlegen und ausprobieren hab ich wenigstens kappiert was der Lehrer mit dem Programm genau wollte. Schade das die Lehrer an meiner Schule leider häufig missverständliche Aufgaben vergeben.

Ich hoffe das Beispiel hat jetzt die letzten Unklarheiten beseitigt. Damit jetzt nur noch Programmierkenntnisse benötigt werden.^^

Geschrieben
Wenn das Auto z. B. in die 2te Etage auf die Parkplatznr. 8 soll, dann müsste in der 1ten 0er Zeile in der Mitte ein Pfeil nach rechts, in der 2ten und 3ten 0er Zeile in der Mitte jeweils ein gerader Pfeil angezeigt werden.
Damit wäre aber der Geradeauspfeil in der obersten Etage unnötig. Naja, egal.

Für jeden der acht verbleibenden Pfeile kannst du also eine Bedingung formulieren, wann er angezeigt werden soll. Beispiel:

bpfeillinks0 = iEtagennr == 0 && iParkplatznr <= 4;

Die anderen kannst du genauso aufbauen.

Geschrieben

Die Bedingungen sind ja ganz unten im Code unter der Funktion

"void schaltePfeile(int iEtagennr, int iParkplatznr)" schon definiert.

Und in der Funktion "void zeichneParkhaus(void)" ist eine switchanweisung die die Pfeile anzeigen soll wenn der entsprechende Pfeil den Wert 1 hat. Was sie aber nicht macht, weil die Funktion

"void schaltePfeile(int iEtagennr, int iParkplatznr)" zwar die benötigten Pfeile mit 1 initialisiert, aber nur lokal. Man müsste irgendwie der Funktion "void zeichneParkhaus(void)" die mit 1 initialisierten Pfeile verklickern.

Geschrieben
Die Bedingungen sind ja ganz unten im Code unter der Funktion

"void schaltePfeile(int iEtagennr, int iParkplatznr)" schon definiert.

Was da in schaltePfeile drinsteht, ist erstens falsch (wegen der lokalen Variablen) und zweitens unnötig kompliziert. Wirf diese halbfertige if-else-Orgie raus, und setz da einfach die 9 Zuweisung wie in meinem Beispiel rein.
Geschrieben

Erstmal vielen Dank für deine Lösung, ich hätte es etwas komplizierter gelöst.

Mich hätte nur mal interessiert wie sich der Lehrer das vorgestellt hat, aus dem vorhandenen Code ohne ihn um zu strukturieren, die Funktion mit den Pfeilen zum laufen zu bringen.

Villeicht hatte die herangehensweise vom Lehrer sogar nen Sinn und sollte uns etwas in Bezug auf globale Variablen klar machen.^^

Naja ich denk ich belass es dabei und bin zufrieden das ich es auf andere weise hinbekommen hätte.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...