помогите решить на C++
Добавьте для класса Timer возможность сохранять начальное время и, в случае, если оставшееся время на таймере - 0 секунд, то вместо вывода сообщения "Done!" восстановите начальное значение времени.
Формат входных данных
В первой строке входных данных вводятся 3 целых числа H, M и S - часы, минуты и секунды соответственно.
Гарантируется, что данные верные.
Во второй строке вводится натуральное число T - количество секунд, в течение которых время должно изменяться.
Формат выходных данных
Выведите T строк в формате hh:mm:ss - время на таймере после каждой новой секунды.
Примечания
В задачу необходимо отправить оба класса: Clock и Timer.
входные данные выходные данные
1 5 51
7
01:05:50
01:05:49
01:05:48
01:05:47
01:05:46
01:05:45
01:05:44
20 21 5
4
20:21:04
20:21:03
20:21:02
20:21:01
часть программы
int main() {
int h, m, s, t;
cin >> h >> m >> s >> t;
Timer c(h, m, s);
Clock anticheat(h, m, s); //Проверка, что описаны оба класса
for (int i = 0; i < t; i++) {
c.tic();
c.print();
}
return 0;
}
Ответы
#include <iostream>
#include<string>
using namespace std;
class Clock {
protected:
int hours;
int minutes;
int secounds;
public:
Clock(int _hours = 0, int _minutes = 0, int _secounds = 0) :
hours(_hours), minutes(_minutes), secounds(_secounds) {}
void tic() {
secounds++;
}
void print() {
int sum = hours * 60 * 60 + minutes * 60 + secounds;
cout << (sum / 3600 < 10 ? "0" : "") << sum / 3600 <<":";
cout << (sum % 3600 / 60 < 10 ? "0" : "") << sum % 3600 / 60 << ":";
cout << (sum % 3600 % 60 < 10 ? "0" : "")<< sum % 3600 % 60 << endl;
}
};
class Timer : public Clock {
public:
Timer(int _hours = 0, int _minutes = 0, int _secounds = 0) : Clock(_hours, _minutes, _secounds) {}
int save_hours = hours;
int save_minutes = minutes;
int save_secounds = secounds;
void tic() {
int sum = hours * 60 * 60 + minutes * 60 + secounds;
if (sum == 0) { hours = save_hours; minutes = save_minutes; secounds = save_secounds-1;}
else secounds--;
}
};
int main() {
int h, m, s, t;
cin >> h >> m >> s >> t;
Timer c(h, m, s);
Clock anticheat(h, m, s); //Проверка, что описаны оба класса
for (int i = 0; i < t; i++) {
c.tic();
c.print();
}
return 0;
}