Tickt wie eine echte Uhr ;)
Michael Planner
main.cpp
- Committer:
- Aagrus
- Date:
- 2020-04-21
- Revision:
- 0:0717eb51cbef
File content as of revision 0:0717eb51cbef:
/****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby, C#, VB, Perl, Swift, Prolog, Javascript, Pascal, HTML, CSS, JS Code, Compile, Run and Debug online from anywhere in world. *******************************************************************************/ #include <stdio.h> #include <ctime> //#include <cstdio> //--------------------- Timer -----------------------// class Time { protected: char s = 0; char m = 0; char h = 0; public: void SetTime(char hour, char min, char sec); virtual char AktualHour(); virtual char AktualMin(); virtual char AktualSec(); }; void Time::SetTime(char hour, char min, char sec) { s = sec; m = min; h = hour; } char Time::AktualSec() { return s; } char Time::AktualMin() { return m; } char Time::AktualHour() { return h; } //--------------------- Uhr -----------------------// class Uhr : public Time { private: // Variabeln für Uhr clock_t tick; clock_t startTick; char sh, sm, ss; // Methoden für Uhr void SetTick(); int GetTickDiff(); void SetNewTime(); unsigned long TimeInSec(); public: // Konstruktoren Uhr(Time time); Uhr(char sec, char min, char hour); // Sonstige Variabeln unsigned long TimeSec(); void SetTime(char hour, char min, char sec); char AktualHour(); char AktualMin(); char AktualSec(); }; // private: void Uhr::SetTick() { startTick = clock(); } int Uhr::GetTickDiff() { // Differenz der Startzeit bis jetzt berrechnen tick = clock() - startTick; int sec = (int)(tick/CLOCKS_PER_SEC); return sec; } void Uhr::SetNewTime() { // Holen der Zeitdifferenz und setze vom Startzeitbezug eine neue Zeit int sec = this->GetTickDiff(); unsigned long timeInSec = ((sh*3600) + (sm*60) + ss) + sec; h = (char)(timeInSec / 3600); m = (char)((timeInSec - (h * 3600)) / 60); s = (char)(timeInSec % 60); } unsigned long Uhr::TimeInSec() { unsigned long sec = (h * 3600) + (m * 60) + s; return sec; } // public: Uhr::Uhr(Time time) : Time() { // relative Zeitvariabeln s = time.AktualSec(); m = time.AktualMin(); h = time.AktualHour(); // Festgelegte Startzeit sh = h; sm = m; ss = s; // Zeitablauf starten this->SetTick(); } Uhr::Uhr(char hour, char min, char sec) : Time() { // relative Zeitvariabeln s = sec; m = min; h = hour; // Festgelegte Startzeit sh = h; sm = m; ss = s; // Zeitablauf starten this->SetTick(); } unsigned long Uhr::TimeSec() { // Setzt Zeit und aktuallisiert this->SetNewTime(); this->TimeInSec(); } char Uhr::AktualSec() { this->SetNewTime(); Time::AktualSec(); } char Uhr::AktualMin() { this->SetNewTime(); Time::AktualMin(); } char Uhr::AktualHour() { this->SetNewTime(); Time::AktualHour(); } int main() { // Uhr setzen Uhr uhr(20, 30, 0); //oder Time t; t.SetTime(10, 2, 30); uhr = t; // Ausgabe der Parameter printf("Zeit in Sec: %lu\n", uhr.TimeSec()); printf("Anzahl an Stunden: %d\n", uhr.AktualHour()); printf("Anzahl an Minuten: %d\n", uhr.AktualMin()); printf("Anzahl an Sekunden: %d\n", uhr.AktualSec()); // Uhrausgabe in Sekundentakt [Zeitmäßig leider nicht genau Sekunden] unsigned long x = uhr.TimeSec(); while (1) { while(x == uhr.TimeSec()){} printf("Zeit in Sec: %lu\n", uhr.TimeSec()); x = uhr.TimeSec(); } return 0; }