Fahrstuhlsteuerung



  • Wellsee schrieb:

    Ja genau, und da fehlt jetzt noch diese funktion, dass er auch noch zwischen durch anhält, einsammelt und rausschmeist 🙂

    Nur über Prüfschleifen ist nichts zu finden, gibts die vielleicht unter anderen namen?

    Lies dir das hier bitte mal durch (und achte vor allem den ersten fettgrdruckten Satz): http://www.c-plusplus.net/forum/viewtopic-var-t-is-200753.html

    Du musst schon wenigstens ein bisschen was selbermachen (und damit ist nicht C&P gemeint).



  • 1. Bin ich hier in dem Forum um zu verstehen, wie ich eine Fahrstuhlsteuerung programmieren, kann, da ich erst vor 2 wochen begonnen habe zu programmieren.

    2. Habe ich nicht nach einer Komplettlösung für meine Hausaufgaben gefragt... gehe ich noch zur Schule? Nein.

    3. Ist es schlimm, dass man die vorher geposteten Sachen übernimmt und sich eigene Komentare dazu schreibt um dies zu verstehen? 😮

    EEK schrieb:

    Und so wie es aussieht, hat er noch nicht mal verstanden wie das Programm funktioniert, weil da noch was fehlt!

    //Befehl für Sleep 1.Teil
    void sleep( clock_t wait );
    

    sieht auch nicht gerade so aus als wenn er Ahnung davon hätte was er da kopiert hat!

    Nein habe ich auch noch nicht ganz... deswegen frage ich euch 🙄

    Alos helft ihr nun oder müsst ihr mir vorhalten, das ich das nicht selber gemacht habe und es nicht verstehe 😮



  • Wellsee schrieb:

    1. Bin ich hier in dem Forum um zu verstehen, wie ich eine Fahrstuhlsteuerung programmieren, kann, da ich erst vor 2 wochen begonnen habe zu programmieren.

    Das ist ja auch ok so!

    Wellsee schrieb:

    2. Habe ich nicht nach einer Komplettlösung für meine Hausaufgaben gefragt... gehe ich noch zur Schule? Nein.

    Nein, aber du hast dir eine Komplettlösung von Jemand anders kopiert!

    Wellsee schrieb:

    3. Ist es schlimm, dass man die vorher geposteten Sachen übernimmt und sich eigene Komentare dazu schreibt um dies zu verstehen?

    Ja, weil wenn du noch keine Ahnung vom Programmieren hast, dann wirst du so nie verstehen wie es funktioniert!

    Wellsee schrieb:

    😮

    EEK schrieb:

    Und so wie es aussieht, hat er noch nicht mal verstanden wie das Programm funktioniert, weil da noch was fehlt!

    //Befehl für Sleep 1.Teil
    void sleep( clock_t wait );
    

    sieht auch nicht gerade so aus als wenn er Ahnung davon hätte was er da kopiert hat!

    Nein habe ich auch noch nicht ganz... deswegen frage ich euch 🙄

    Alos helft ihr nun oder müsst ihr mir vorhalten, das ich das nicht selber gemacht habe und es nicht verstehe 😮

    Kein Mensch wird dir hier was vorhalten wenn du ein bisschen Eigeninitiative zeigst und bei deinem eigenem Programm nicht weiter kommst!



  • Und das ist kein Befehl, sondern eine Funktion

    //Befehl für Sleep 1.Teil
    void sleep( clock_t wait );
    


  • Dass du dir eigene Kommentare notiert hast, hatte ich nicht gesehen. Akzeptiert.

    Also eigentlich musst du dir ja nur eine Liste von noch anzufahrenden Etagen machen. Und in der Schleife, die schon da ist (in der von Quell- zu Zieletage gefahren wird), prüfst du jede aktuelle Etage auf Vorkommen in der Liste. Ist sie vorhanden, hältst du kurz an, damit dein Passagier aussteigen kann ( 😉 ) und löschst den Eintrag aus der Liste.

    Als Liste wäre std::vector geeignet (z.B. std::vector<int>). Du findest hier

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143816.html

    eine Beschreibung (Tipp: hinzufügen eines Elements geht schon mal mit der Methode push_back).

    Ich würde sagen, realisiere das erstmal für einen Durchgang, also nur eine Fahrt von Start bis Ziel mit eventuellem Zwischenstopp. Die Liste füllst du dann erstmal von Hand (im Quellcode) mit ein, zwei Werten. Später könnte man per Zufallsgenerator Passagiere quasi drücken lassen. Und später muss noch eine große Schleife drumrum, damit der Fahrstuhl mehr als nur eine Fahrt macht. Aber das ist erst mal noch Zukunftsmusik...



  • Hey Leute, in meiner Steuerung habe ich es jetzt immerhin geschafft eine Funktion drumzubauen die den Fahrstuhl weiterfahren lässt, nun stehe ich nur immer noch vor dem Problem, eine logische Abfrage der Etagen darzustellen.

    Das mit dem vector habe ich nicht ganz verstanden, oder kann ich meine For- Schleife auch alle Etagen mit push_back in einer Liste anzeigen lassen?
    Aber selbst wenn, dann kann ich ihm ja auch erst im nachhinein sagen, dass bei Etage x gedrückt wurde 😕

    Ich habe es jetzt erstmal mit einer while-Schleife probiert, die bei den Etagen abfragt, ob x=1 ist. Dann soll angehalten werden und eine neue Zieletage eingegeben werden. Würde das so auch funktionieren, mit Sachen die noch fehlen?

    while (x=1)    //Befehl/Funktion/Anweisung für x=1 durch nicht sichtbare äußere Eingabe fehlt(Etagenknopf), realisierbar?
        {
         cout<<"\n    Zieletage: ";
         cin>>ze2;
        }  // logisches Abfahren der Etagen implementieren, aber wie?
    

    Habe mir mal ein Schema erstellt:

    http://img137.imageshack.us/i/fahrstuhl.jpg/



  • "=" ist kein Vergleich! Du weist hier x den Wert 1 zu, anstatt zu vergleichen, ob x 1 ist. Das geht mit dem Operator "==".

    if(x==1) { ... }
    

    Zeig mal den ganzen Code. Aus deiner Beschreibung werde ich nicht ganz schlau...



  • Ich glaube mit If kann man das logische Abfahren der Etagen ermöglichen 🙂

    Nur leider fehlt jetzt noch die aktivierung von x=1
    sonst würde es gehen glaub ich :p

    //Aufzugsteuerung
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    void sleep( clock_t wait );     //Sleep 1.Teil
    
    int main()
    {
      short ae, ze, ze2, x;      //short benutzt, da ae und ze nur Werte 0 - 9 annehmen
      float thoch, trunter;      //float, da thoch und trunter auch Dezimalen sein können
    
      cout<<" Etage(0...9): ";
      cin>>ae;    //Anfangsetage eingeben
      _1:;
      cout<<"\n    Zieletage: ";  
      cin>>ze;    //Zieletage eingeben  
      thoch=(ze-ae)*2.5; 
      trunter=(ae-ze)*2.5;
    
      if(ae<ze)
      {
        cout<<"\n    Fahrdauer: "<<thoch<<"s\n\n\n";   //Fahrzeit wird angezeigt
        for(ae;ae<=ze;ae=ae+1)     //Stockwerke werden alle 2,5 Sekunden angezeigt
        {
          {
          while(x=1)                 //Befehl/Funktion/Anweisung für x=1 durch nicht sichtbare äußere Eingabe fehlt(Etagenknopf), realisierbar?
                {
                cout<<"\n    Zieletage: ";
                cin>>ze2;
                }                 
          if(ze2<ze)
           {
           for(ae;ae<=ze;ae=ae+1)
           cout<<" Etage: ";
           cout<<ae;
           sleep(2500);
           cout<<"\n";
           }
          }
          cout<<" Etage: ";
          cout<<ae;
          sleep(2500);
          cout<<"\n";
        }
      }
      else
      {
        cout<<"\n    Fahrdauer: "<<trunter<<"s\n\n\n";   //Fahrzeit wird angezeigt
        for(ae;ae>=ze;ae=ae-1)   //Stockwerke werden alle 2,5 Sekunden angezeigt
        {
          {
          while(x=1)                 //Befehl/Funktion/Anweisung für x=1 durch nicht sichtbare äußere Eingabe fehlt(Etagenknopf), realisierbar?
                {
                cout<<"\n    Zieletage: ";
                cin>>ze2;
                }              
          if(ze2>ze)
           {
           for(ae;ae<=ze;ae=ae-1)
           cout<<" Etage: ";
           cout<<ae;
           sleep(2500);
           cout<<"\n";
           }
          }
          cout<<" Etage: ";
          cout<<ae;
          sleep(2500);
          cout<<"\n";
        }
      }
    cout<<"\n Aussteigen!\n\n\n\n";
    
    ae=ze;
    goto _1;
    system ("Pause");
    }
    
    void sleep( clock_t wait )         //Sleep 2.Teil
    {
       clock_t goal;
       goal = wait + clock();
       while( goal > clock() )
          ;
    }
    


  • Oh ich habe deinen Post so schnell gar nicht gelesen 😃

    okay danke, dann werde ich das mal einbauen



  • Du deklarierst eine Variable x und fragst sie später ab (" while(x==1) "), ohne ihr einen Wert zuzuweisen! Da steht dann irgendein beliebiger Wert drin, halt was an der Stelle gerade so im Speicher rumfliegt. Richtiger wäre es also, x mit einem Wert (0, 1, ?) zu initialisieren. Das wäre aber trotzdem noch ziemlich falsch, da deine while-Schleifen dann von potenziellen zu sicheren Endlos-Schleifen mutieren würden. Verstehst du, warum?



  • Stimmt, das leuchtet ein, sonst würde er immer nur irgendwas oder, wenn ich etwas zuweise, immer das gleiche abrufen, wenn ich x so benutze oder?

    Vielleicht so erstmal ohne while, sondern mit if? Wenn ich x=0 annehme?
    Dann funktionierts auch erstmal normal (x=0). Nur fehlt dann noch die Funktion, die sozusagen die Etagentaste erkennt und x bei der richigen Etage auf 1 setzt. Sehe ich das richtig? 😞

    Habe überlegt, dass man das vielleicht mit einer do while schleife realisieren könnte... In meinem schlauen Buch steht aber, dass erst die Schleife ausgeführt und dann erst die Bedingung geprüft wird. Aber das würde doch rein theoretisch passen?

    Etage erreicht (Schleife) ----> Prüfe, ob x=1 (Bedingung)

    Nur wie man das jetzt wieder einbauen könnte 😕

    //Aufzugsteuerung
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    void sleep( clock_t wait );     //Sleep 1.Teil
    
    int main()
    {
      short ae, ze, ze2, x=0;      //short benutzt, da ae und ze nur Werte 0 - 9 annehmen
      float thoch, trunter;      //float, da thoch und trunter auch Dezimalen sein können
    
      cout<<" Etage(0...9): ";
      cin>>ae;    //Anfangsetage eingeben
      _1:;
      cout<<"\n Zieletage: ";  
      cin>>ze;    //Zieletage eingeben  
      thoch=(ze-ae)*2.5; 
      trunter=(ae-ze)*2.5;
    
      if(ae<ze)
      {
        cout<<"\n Fahrdauer: "<<thoch<<"s\n\n\n";   //Fahrzeit wird angezeigt
        for(ae;ae<=ze;ae=ae+1)     //Stockwerke werden alle 2,5 Sekunden angezeigt
        {
          if(x==1)
           {
            cout<<"\n Zieletage: ";
            cin>>ze2;
           }
          else
          {
          cout<<"\t\tEtage: ";
          cout<<ae;
          sleep(2500);
          cout<<"\n";
          }
        }
      }
      else
      {
        cout<<"\n Fahrdauer: "<<trunter<<"s\n\n\n";   //Fahrzeit wird angezeigt
        for(ae;ae>=ze;ae=ae-1)   //Stockwerke werden alle 2,5 Sekunden angezeigt
        {
          if(x==1)
           {
            cout<<"\n Zieletage: ";
            cin>>ze2;
           }
          else
          {
          cout<<"\t\tEtage: ";
          cout<<ae;
          sleep(2500);
          cout<<"\n";
          }
        }
      }
    
    ae=ze;
    goto _1;
    system ("Pause");
    }
    
    void sleep( clock_t wait )         //Sleep 2.Teil
    {
       clock_t goal;
       goal = wait + clock();
       while( goal > clock() )
          ;
    }
    

    Oder doch ganz anders? Mit einer Taste für alles, eben die Fahrstuhl rufen Taste.
    Müsste man dann doch allen Etagen eine Variable zuweisen und diese dann einzeln abrufen oder abfragen lassen?
    Also er fährt und fragt bei jedem Stock z.B. Etage5=1 ? --> Etage6=1 ?

    bin einfach zu unerfahren in diesem Gebiet 😞



  • Wellsee schrieb:

    Stimmt, das leuchtet ein, sonst würde er immer nur irgendwas [abrufen]

    Ja.

    Wellsee schrieb:

    oder, wenn ich etwas zuweise, immer das gleiche abrufen, wenn ich x so benutze oder?

    Na ja, dann würde er gar nix abrufen, weil du ja nur zuweisen und gar nicht vergleichen würdest.

    Wellsee schrieb:

    Vielleicht so erstmal ohne while, sondern mit if? Wenn ich x=0 annehme?

    Ich weiß weder, was du meinst, noch was du eigentlich mit x bezweckst. Du sprichst in Rätseln. 😉

    Wellsee schrieb:

    Dann funktionierts auch erstmal normal (x=0).

    Das sicher nicht. Wie gesagt, das ist eine Zuweisung. Du kannst niemals x auf 0 oder einen anderen Wert prüfen, indem du "x=..." schreibst. Zum Vergleichen kannst du nur den Vergleichsoperator benutzen, und das ist nunmal "==", nicht "=". Mit einem Auto kannst du ja auch nicht fahrradfahren. Und mit einem Zuweisungsoperator kannst du nicht vergleichten. Merken!

    Bitte schnapp dir das Buch deines Vertrauens und arbeite die ersten Kapitel nochmal ganz ausführlich durch. Du scheinst da ein paar Seiten ausgelassen zu haben.



  • Also x hab ich trotz des Vergleiches auf 0 gesetzt, damit bei dem if nichts passiert. Also, dass die Anwenung, die neu eingebaut ist, erstmal keine Funktion hat. Wenn es dann einen Weg gibt die Etagentaste zu aktivieren und bei x==0 dann 1 rauskommt, damit er in den Stockwerken anhält, dann nehme ich einfach x=0 raus.
    Oder kann man das nicht so machen um if(x==0) erstmal noch deaktiviert zu lassen?

    Aber ich werd mir doch wohl lieber noch mal mein Buch zur Hand nehmen und alles durchgehen...
    Kannst du ein Buch empfehlen? Habe z.Z "C++ Einführun und professionelee Programmierung" von Ulrich Breymann
    Viele meinen auch, dass "C++ von A-Z" gut ist?



  • @wellsee: das Buch habe ich auch allerdings hat es mir so überhaupt nicht zu gesagt das alles sehr kompliziert ist ich werde mir jetzt bald wohl das buch c++ von a-z holen:
    http://www.amazon.de/von-bis-Mit-CD-ROM-umfassende/dp/3836214296/ref=pd_bxgy_b_img_a
    kann das buch auch jemand anders empfehlen...???

    lg os



  • "Thinking in C++" ist gut und kostenlos als Download (HTML oder PDF) im Internet zu finden. Der "C++ Primer" wird auch immer wieder hier empfohlen.



  • @_matze danke für den tip...


Anmelden zum Antworten