Fahrstuhlsteuerung
-
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,
dannfor(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!
-
jo hast recht habs hin bekommen jetzt läuft erstmal alles...
-
Geht auch ohne 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; for(; aktuelleEtage!=zielEtage; aktuelleEtage<zielEtage ? aktuelleEtage++ : aktuelleEtage--) { cout<<"\t"; cout<<aktuelleEtage; sleep(500); cout<<"\n"; if(aktuelleEtage==zielEtage) { break; } } cout<<"\t"; cout<<aktuelleEtage; system ("Pause"); } void sleep( clock_t wait ) // Die Funktion gehört auserhalb der Main-Funktion { clock_t goal; goal = wait + clock(); while( goal > clock() ) ; }
Um es einfach zu halten, solltest du aber vielleicht erstmal bei den 2 Schleifen bleiben.
-
ok danke
-
hey ich nochmal, habe ein neues problem:und zwar möchte ich umgehen, dass ich bei jeder zahl die ich eingebe immer die return-taste drücken muss. Gibt es da eine anweisung, mit der man diesen Tastendruck erstetzen kann?
-
nichts plattformunabhängiges.
btw: lies dir doch ma deinen post durch, bevor du auf absenden klickst...
-
OSKiel schrieb:
hey ich nochmal, habe ein neues problem:und zwar möchte ich umgehen, dass ich bei jeder zahl die ich eingebe immer die return-taste drücken muss. Gibt es da eine anweisung, mit der man diesen Tastendruck erstetzen kann?
Kleines Demo (gilt nur, wenn du conio.h nutzen kannst):
int main() { cout << "Zeichenweise Eingabe ohne Enter-Taste:" << endl; for(;;) { while(!kbhit()) { char c=_getch(); cout << c; } } }
-
Hey leute, ich programmiere in meinem Betrieb auch so eine Steuerung, ich bin jetzt genau so weit und die Fahrstuhlsteuerung läuft, nur fehlt jetzt die Logik in der Steuerung.
Wenn jemand z.B. vom 10. in 1. fährt und bei 7 noch einer drückt, der in 3 will, dann sollte der Fahrstuhl auch bei 7 anhalten, dann bei 3 und zum schluss erst bei 1also
9-------1|
--7---3--| /sollte zwischengeschoben werden könnenWie könnte man so etwas realisieren? Habe mal was von einer Zähl/Prüfschleife gehört, aber weder mein Buch, noch das Internet gibt etwas verständliches darüber her?
PS: Habe das Buch "C++ Einführung und Professionelle Programmierung" von Ulrich Breymann, kennt ihr vielleicht noch empfehlenswerte/bessere Bücher zu C++ ?
gruß Welle
-
So, jetzt auch registriert
Sorry, ich habe einen Fehler in dem Text oben. Er sollte von der 10 starten, dann die 7 einsammeln und erst zur 1 und zum Schluss zur 3.
Sonnst kommt die 10 ja nie unten an^^
-
Wellsee schrieb:
Sonnst kommt die 10 ja nie unten an^^
Warum