Invisi09 Geschrieben 17. Juni 2009 Geschrieben 17. Juni 2009 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 Zitieren
Klotzkopp Geschrieben 17. Juni 2009 Geschrieben 17. Juni 2009 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. Zitieren
Invisi09 Geschrieben 17. Juni 2009 Autor Geschrieben 17. Juni 2009 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. Zitieren
Klotzkopp Geschrieben 17. Juni 2009 Geschrieben 17. Juni 2009 Damit sollte klar sein, was die Pfeile nach links und rechts bedeuten. Allerdings frage ich mich, wann jemals ein Geradeauspfeil angezeigt werden soll. Zitieren
Invisi09 Geschrieben 17. Juni 2009 Autor Geschrieben 17. Juni 2009 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.^^ Zitieren
Klotzkopp Geschrieben 17. Juni 2009 Geschrieben 17. Juni 2009 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. Zitieren
Invisi09 Geschrieben 18. Juni 2009 Autor Geschrieben 18. Juni 2009 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. Zitieren
Klotzkopp Geschrieben 18. Juni 2009 Geschrieben 18. Juni 2009 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. Zitieren
Invisi09 Geschrieben 18. Juni 2009 Autor Geschrieben 18. Juni 2009 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. 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.