Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cmath>
- class Clock
- {
- protected:
- unsigned int hh;
- unsigned int mm;
- unsigned int ss;
- bool isSummer;
- int dailyseconds;
- std::string time;
- void SetTime(int deltaseconds)
- {
- unsigned int currtime = this->hh * 3600 + this->mm * 60 + this->ss;
- int newtime = (currtime + deltaseconds);
- if (newtime > this->dailyseconds)
- newtime -= this->dailyseconds * int(newtime / this->dailyseconds);
- if (newtime < 0)
- newtime += this->dailyseconds * (int(std::abs(newtime) / this->dailyseconds) + 1);
- this->hh = int(newtime / 3600);
- this->mm = int((newtime - this->hh * 3600) / 60);
- this->ss = newtime - this->hh * 3600 - this->mm * 60;
- time = "";
- if (hh < 10)
- {
- time += "0" + std::to_string(hh);
- }
- else
- {
- time += std::to_string(hh);
- }
- time += ":";
- if (mm < 10)
- {
- time += "0" + std::to_string(mm);
- }
- else
- {
- time += std::to_string(mm);
- }
- time += ":";
- if (ss < 10)
- {
- time += "0" + std::to_string(ss);
- }
- else
- {
- time += std::to_string(ss);
- }
- std::cout << "Время успешно изменено" << std::endl;
- }
- public:
- std::string GetTime() { return time; }
- virtual void PrintTime() = 0;
- virtual void TransferToSummer()
- {
- std::cout << "Время успешно переведено на летнее" << std::endl;
- this->isSummer = !this->isSummer;
- }
- virtual void TransferToWinter()
- {
- std::cout << "Время успешно переведено на зимнее" << std::endl;
- this->isSummer = !this->isSummer;
- }
- Clock()
- {
- this->time = "00:00:00";
- this->hh = 0;
- this->mm = 0;
- this->ss = 0;
- this->isSummer = false;
- }
- };
- class MechanicalClock: protected Clock
- {
- public:
- void RotateMinuteArrow(float angleValue)
- {
- std::cout << "Изменение времени с помщью поворота минутной стрелки часов на " << angleValue << " градус(ов)" << std::endl;
- SetTime(angleValue * 10);
- }
- void RotateHourArrow(float angleValue)
- {
- std::cout << "Изменение времени с помщью поворота часовой стрелки часов на " << angleValue << " градус(ов)" << std::endl;
- SetTime(angleValue * 120);
- }
- void PrintTime() override
- {
- std::cout << "Механические часы показывают время: " << this->time << std::endl;
- }
- void TransferToSummer() override
- {
- if (!this->isSummer)
- {
- this->RotateMinuteArrow(360);
- Clock::TransferToSummer();
- }
- }
- void TransferToWinter() override
- {
- if (isSummer)
- {
- this->RotateMinuteArrow(-360);
- Clock::TransferToWinter();
- }
- }
- MechanicalClock() : Clock()
- {
- this->dailyseconds = 43200;
- }
- };
- class DigitalClock : protected Clock
- {
- public:
- void IncSecond()
- {
- std::cout << "Изменение времени с помощью нажатия на кнопку увеличения секунд: " << std::endl;
- SetTime(1);
- }
- void IncMinute()
- {
- std::cout << "Изменение времени с помощью нажатия на кнопку увеличения минут: " << std::endl;
- SetTime(60);
- }
- void IncHour()
- {
- std::cout << "Изменение времени с помощью нажатия на кнопку увеличения часов: " << std::endl;
- SetTime(3600);
- }
- void PrintTime() override
- {
- std::cout << "Цифровые часы показывают время: " << this->time << std::endl;
- }
- void TransferToSummer() override
- {
- if (!this->isSummer)
- {
- this->IncHour();
- Clock::TransferToSummer();
- }
- }
- void TransferToWinter() override
- {
- if (this->isSummer)
- {
- for (int i = 0; i < 23; ++i)
- this->IncHour();
- Clock::TransferToSummer();
- }
- }
- DigitalClock() : Clock()
- {
- this->dailyseconds = 86400;
- }
- };
- int main()
- {
- system("chcp 1251");
- DigitalClock dc = DigitalClock();
- dc.IncHour();
- dc.TransferToSummer();
- dc.TransferToWinter();
- dc.PrintTime();
- }
Advertisement
Add Comment
Please, Sign In to add comment