Fahrstuhlsteuerung



  • Moin!
    Ich habe folgendes Problem, ich soll eine Steuerung für einen Aufzug Programmieren und in der Steuerung sollen die gefahrenen Stockwerke angezeigt und gleichzeitig eine Zeitverzögerung von 2.5 sec pro Etage eingestellt werden. Bin noch anfänger in C++! Habe erst vor 2 Wochen mit dem Programmieren begonnen.
    Mein Programm sieht wie folgt aus:

    #include<stdio.h>
    #include<iostream.h>

    int main(void)
    {
    short ae, e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ze;
    float thoch, trunter;

    {
    e0=0;
    e1=1;
    e2=2;
    e3=3;
    e4=4;
    e5=5;
    e6=6;
    e7=7;
    e8=8;
    e9=9;

    cout<<"Etage(0...9): ";
    cin>>ae;
    cout<<"\nZiel-Etage: ";
    cin>>ze;
    thoch=(ze-ae)*2.5;
    trunter=(ae-ze)*2.5;
    {
    if(ae<ze)
    {
    cout<<"\n"<<thoch<<"s\n\n";
    }
    else
    {
    cout<<"\n"<<trunter<<"s\n\n";
    }
    }
    }
    system ("Pause");
    }

    Danke schonmal!



  • Vergiss es, den Fahrstuhlsimulator 2009 gibt's schon: http://dannz.bplaced.net/fahrstuhl-simulator-2009/ 😃

    Nee im Ernst, was genau ist denn deine Frage? Die Zeit-Geschichte könntest du mit clock machen:

    http://msdn.microsoft.com/en-us/library/4e2ess30(VS.71).aspx



  • Naja nehmen wir mal an das der Fahrstuhl inder etage 0 startet und jetzt jemand in der etage 4 afu den knopf drückt. Dann soll das Programm von 0 bis 4 alle etagen anzeigen und je mit einer verzögerung von 2,5 sekunden (also gesamt 10 sekunden).und soll es dann also auch bei allen anderen möglichkeiten passieren.



  • Und das ganze soll syncron ablaufen? Also während der fahrt, soll kein weites stockwerk gewählt werden können? Die Fahrstuhlsteuerung soll sich nich die gedrückten Stockwerke merken udn diese logisch abfahren`?



  • Ok, mal ein paar Anregungen:

    - Die variablen e0-e9 kannst du dir sparen. Du verwendest sie nicht, und auch wenn, wären sie höchstwahrscheinlich unnötig.

    - 'ae' ist kein guter Variablenname. Benutze sprechende Bezeichner, wie z.B. 'aktuelleEtage' oder 'EtageAktuell'.

    - Sieh dir die Doku zu clock an, um diese zeitliche Sache umsetzen zu können (die sleep-Funktion im Beispiel dort sieht doch ganz gut aus).

    - Du wirst eine Schleife programmieren müssen, um dein Ziel umzusetzen. Mach dich mal vertraut mit dem Konzept einer for-Schleife.



  • NullBockException schrieb:

    Und das ganze soll syncron ablaufen? Also während der fahrt, soll kein weites stockwerk gewählt werden können? Die Fahrstuhlsteuerung soll sich nich die gedrückten Stockwerke merken udn diese logisch abfahren`?

    erstmal noch nicht aber nachher soll es an unserem Modellfahrstuhl genauso funktionieren wie in echt!

    @_matze: danke für deine tips meinste mit der sleep funktion den link:

    http://msdn.microsoft.com/en-us/library/4e2ess30(VS.71).aspx

    so in etwa schon besser oder?

    #include<stdio.h>
    #include<iostream.h>
    int main(void)
    {
    short aktuelleEtage, zielEtage;
    float thoch, trunter;
    {
    cout<<"Etage(0...9): ";
    cin>>aktuelleEtage;
    cout<<"\nZiel-Etage: ";
    cin>>zielEtage;
    thoch=(zielEtage-aktuelleEtage)*2.5;
    trunter=(aktuelleEtage-zielEtage)*2.5;
    {
    if(aktuelleEtage<zielEtage)
    {
    cout<<"\n"<<thoch<<"s\n\n";
    }
    else
    {
    cout<<"\n"<<trunter<<"s\n\n";
    }
    }
    for(aktuelleEtage=0; aktuelleEtage<=9; aktuelleEtage=aktuelleEtage+1)
    {
    cout<<"\t";
    cout<<aktuelleEtage;

    cout<<"\n";
    }

    }
    system ("Pause");
    }



  • OSKiel schrieb:

    @_matze: danke für deine tips meinste mit der sleep funktion den link:

    http://msdn.microsoft.com/en-us/library/4e2ess30(VS.71).aspx

    Klar, den mein ich. Sieh dir den Beispiel-Code an.

    Und dann überleg dir mal, wie du eine for-Schleife notieren musst, damit du von der aktuellen Etage bis zur Ziel-Etage alle Etagen durchgehst und jeweils 2.5s wartest.



  • tut mir leid auch wenn du mich jetzt für völlig unfähig hälts ich checke da garnets in dem code...ich hab den mal 1 zu 1 in mein programm rein gehaun und er läuft net...

    Fehlermeldung1:
    [Linker error] undefined reference to `sleep(long)'

    Fehlermeldung2:
    32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h ld returned 1 exit status



  • Du musst den Code auch nicht 1 zu 1 einbinden!
    So in etwas sollte es funktionieren

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    void sleep( clock_t wait );
    
    int main( void )
    {
    
       std::cout << "Jetzt 2.5 Sec. warten" << std::endl;
       sleep(2500);
       std::cout << "2.5 Sec. spaeter" << std::endl;
    
    }
    
    /* Pauses for a specified number of milliseconds. */
    void sleep( clock_t wait )
    {
       clock_t goal;
       goal = wait + clock();
       while( goal > clock() )
          ;
    }
    


  • danke habs gleich ausprobiert aber es funktioniert trotzdem net er gibt mir folgende Fehlermeldung:

    49 `wait' undeclared (first use this function)



  • Zeig mal deine Quellcode und benutze bitte die cpp-tags. Entweder auf den Button C/C++ zwei Mal klicken oder [ cpp][ /cpp] ohne die Leerzeichen vor und nach deinem Code schreiben!



  • Schön juten dach,

    um eine Zeitverzögerung in die Schritte zu bringen, wie in deinem Fall 2,5 sec
    könntest du folgendes in deinen Quelltext einbingen:

    //Aufzugsteuerung
    
    #include<iostream.h>
    #include<stdio.h>
    //windows.h muss eingebunden werden, damit die Sleepfunktion greift.
    #include<windows.h>
    
    int main (void)
    {
    short ausgansEtage,ZielEtage;
    float thoch,trunter,t;
    cout<<"Etage (0...9): ";
    cin>>ausgangsEtage;
    cout<<"Zieletage: ";
    cin>>ZielEtage;
    thoch=(ZielEtage-ausgangsEtage)*2.5;
    trunter=(ausgansEtage-ZeilEtage)*2.5;                    
    //Hier sollte die Zeitverzögerung kommen.
    float zeit=2500.0f;
    for (ae=0;ae<=9;ae=ae+1)
    {
        t=ae*2.5;
        cout<<"\t   "<<ae<<"\n";
        Sleep ((int) zeit);
        zeit*=1.0f;
    }
    //Zeitverzögerung Ende.
    {
        if (ausgangsEtage<ZielEtage)
        {
        cout<<"\nDer Fahrstuhl benoetigt "<<thoch<<" Sekunden, um um in den "<<ZielEtage<<". Stock zu fahren.\n\n\n";
        }
        else
        {
        cout<<"Der Fahrstuhl benoetigt "<<trunter<<" Sekunden, um in den "<<ZielEtage<<". Stock zu fahren.\n\n\n";
        }     
    }
    
    system ("pause");   
    }
    

    gruß little 😉



  • [/cpp]

    #include<stdio.h>
    #include<iostream.h>
    #include <cstdlib> 
    #include <ctime> 
    
    void sleep( clock_t wait );
    
    int main(void)
    {
    short aktuelleEtage, zielEtage;
    float thoch, trunter;
    {      
    cout<<"Etage(0...9): ";
    cin>>aktuelleEtage;
    cout<<"\nZiel-Etage: ";
    cin>>zielEtage;        
    thoch=(zielEtage-aktuelleEtage)*2.5;
    trunter=(aktuelleEtage-zielEtage)*2.5;
                        {
                          if(aktuelleEtage<zielEtage)
                         {
                          cout<<"\n"<<thoch<<"s\n\n";
                         }
                          else
                         {
                           cout<<"\n"<<trunter<<"s\n\n";
                         }
                        }
                 for(aktuelleEtage=0; aktuelleEtage<=9; aktuelleEtage=aktuelleEtage+1)
                 {
                           cout<<"\t";
                           cout<<aktuelleEtage;
                           { 
    
       std::cout << "Jetzt 2.5 Sec. warten" << std::endl; 
       sleep(2500); 
       std::cout << "2.5 Sec. spaeter" << std::endl; 
    
    } 
    
    /* Pauses for a specified number of milliseconds. */ 
    void sleep( clock_t wait );
    {  
       clock_t goal; 
       goal = wait + clock(); 
       while( goal > clock() ) 
          ; 
    }
                           cout<<"\n";
                 }
    
    }
    system ("Pause");
    }
    

    [cpp]



  • #include <iostream> // ohne .h
    #include <cstdlib> 
    #include <ctime> 
    
    using namespace std;
    
    void sleep( clock_t wait ); 
    
    int main(void) 
    { 
    short aktuelleEtage, zielEtage; 
    double thoch, trunter; 
    {       
    cout<<"Etage(0...9): "; 
    cin>>aktuelleEtage; 
    cout<<"\nZiel-Etage: "; 
    cin>>zielEtage;         
    thoch=(zielEtage-aktuelleEtage)*2.5; 
    trunter=(aktuelleEtage-zielEtage)*2.5; 
                        { 
                          if(aktuelleEtage<zielEtage) 
                         { 
                          cout<<"\n"<<thoch<<"s\n\n"; 
                         } 
                          else 
                         { 
                           cout<<"\n"<<trunter<<"s\n\n"; 
                         } 
                        } 
                 for(aktuelleEtage=0; aktuelleEtage<=9; aktuelleEtage=aktuelleEtage+1) 
                 { 
                           cout<<"\t"; 
                           cout<<aktuelleEtage; 
                           { 
    
       std::cout << "Jetzt 2.5 Sec. warten" << std::endl; 
       sleep(2500); 
       std::cout << "2.5 Sec. spaeter" << std::endl; 
    
    } 
    
    /* Pauses for a specified number of milliseconds. */ 
    
                           cout<<"\n"; 
                 } 
    
    } 
    system ("Pause"); 
    }
    
    void sleep( clock_t wait ) // Die Funktion gehört auserhalb der Main-Funktion
    {
       clock_t goal;
       goal = wait + clock();
       while( goal > clock() )
          ;
    }
    


  • hey vielen dank es funktioniert...jetzt habe ich nur noch ein problem...wie schaffe ich es das jetzt nicht immer alle (von 0-9) aufgelistet werden sondern nur von anfangsetage bis zieletage...???



  • for(aktuelleEtage; aktuelleEtage<=9; aktuelleEtage=aktuelleEtage+1)
    

    und nicht

    for(aktuelleEtage=0; aktuelleEtage<=9; aktuelleEtage=aktuelleEtage+1)
    

    wenn du es so schreibst, dann setzt du mit "aktuelleEtage=0" immer wieder auf 0 zurück



  • Ach ja, und wenn der Fahrstuhl nicht immer bis ganz nach Oben fahren soll,
    dann

    for(aktuelleEtage; aktuelleEtage<=zielEtage;
    

    sonst fährt er immer in die 9. Etage!

    Du solltest dir erst mal die Grundlagen richtig anschauen!



  • Am kürzesten wäre es so zu schreiben

    for(; aktuelleEtage<=zielEtage; aktuelleEtage++)
    


  • danke das funktioniert auch prima aber nur wenn er von einer niedrigen anfangsetage zu einer hohen endetage fährt also nur bei z.B. 2 nach 5; und nicht bei 5 nach 2 muss ich da jetzt eine zweite for anweisung schreiben? und wenn ja wie sollte die lauten...???



  • Ich habe dein Programm jetzt mal ein bisschen formatiert, weil das ehrlich gesagt eine Katastrophe war!

    Du hast ja eigentlich schon richtig angefangen. Und ja, du brauchst noch eine 2. Schleife

    #include <iostream> // ohne .h
    #include <cstdlib> 
    #include <ctime> 
    
    using namespace std;
    
    void sleep( clock_t wait ); 
    
    int main(void) 
    { 
      short aktuelleEtage, zielEtage; 
      double thoch, trunter; 
    
      cout<<"Etage(0...9): "; 
      cin>>aktuelleEtage; 
      cout<<"\nZiel-Etage: "; 
      cin>>zielEtage;         
      thoch=(zielEtage-aktuelleEtage)*2.5; 
      trunter=(aktuelleEtage-zielEtage)*2.5; 
    
      if(aktuelleEtage<zielEtage) 
      { 
        cout<<"\n"<<thoch<<"s\n\n";
    	for(; aktuelleEtage<=zielEtage; aktuelleEtage++)
        {
    	  cout<<"\t"; 
          cout<<aktuelleEtage;
    	  sleep(2500); 
    	  cout<<"\n"; 
        } 
      } 
      else 
      { 
        cout<<"\n"<<trunter<<"s\n\n";
        // Hier fehlt die Schleife
      } 
    
    system ("Pause"); 
    }
    
    void sleep( clock_t wait ) // Die Funktion gehört auserhalb der Main-Funktion
    {
       clock_t goal;
       goal = wait + clock();
       while( goal > clock() )
          ;
    }
    


  • OSKiel schrieb:

    und wenn ja wie sollte die lauten...???

    Du musst die Schleife ja nur "umdrehen". Denk Mal selber ein bisschen darüber nach, dann kommst du bestimmt auch alleine drauf!


Anmelden zum Antworten