Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cmath>
- using namespace std;
- char EnterTheTime[255];
- char symbol;
- int num = 0;
- bool check = 0;
- void Line ()
- {
- cout << "\n---------------------------------------------------------\n";
- } // Эта линия для лучшей видимости вывода
- class Time
- {
- public:
- int Hour, Min, Sec;
- Time ();
- void ShowTime (); // Объявление метода, который будет отображать время в правильном формате
- void NewTimeInFuture (int); // Объявление метода, который отобразит момент времени через S секунд, величина S меньше количества оставшихся до конца суток секунд
- void HowSecondsLeft (); // Объявление метода, который отобразит количество пройденных секунд за эти сутки
- void NewTimeInPaste (int); // Объявление метода, который отобразит момент времени через S секунд, величина S меньше количества прошедших после начала суток секунд
- int DifferenceTime (int, int, int); // Объявление метода, который вернет нам разницу двух моментов времени
- };
- Time:: Time ()
- {
- Hour = -1, Min = -1, Sec = -1;
- while (true) // бесконечный цикл для того, чтобы пользователь вводил данные до тех пор, пока не введет правильно
- {
- cout << "Введите время в формате ЧЧ:ММ:СС (например: 21:42:57)\n";
- cin.getline(EnterTheTime, sizeof(EnterTheTime));
- ofstream Fout ("time.txt");
- Fout << EnterTheTime; // Записываем в файл всю эту строку
- Fout.close ();
- {
- ofstream Fout ("Time.txt");
- ifstream f ("time.txt");
- while (f >> symbol)
- {
- if (symbol != ':')
- Fout << symbol; // Записываем в новый файл только числа
- if (symbol != ':' && symbol != '0' && symbol != '1' && symbol != '2' && symbol != '3' && symbol != '4' && symbol != '5' && symbol != '6' && symbol != '7' && symbol != '8' && symbol != '9')
- check = 1; // Если формат ввода не совпадает, check становится равной 1, что означает повтор цикла на ввод времени
- }
- f.close ();
- Fout.close ();
- }
- ifstream f ("Time.txt");
- f >> num; // по итогу у нас получилось 6-ти значное число, например: 214257 (21:42:57)
- f.close ();
- Hour = num / 10000; // делим 214257 на 10.000, и оставшаяся целая часть это количество часов = 21
- Min = num / 100; // делим 214257 на 100, и остается целая часть 2142
- Min = Min % 100; // находим числа после запятой, при делении оставшейся части (2142) на 100, и получается количество минут = 42
- Sec = num % 100; // находим числа после запятой при делении 214257 на 100, тем самым находим количество секунд = 57
- if (Hour > -1 && Hour < 24 && Min > -1 && Min < 60 && Sec > -1 && Sec < 60 && !check)
- break; // если все условия соответствуют требованиям, то цикл ввода времени прекращается
- else // если же нет, то все повторяем
- {
- cout << "Введенное вами время не подходит под этот формат, попробуйте еще раз\n\n";
- if (check)
- check = 0;
- }
- }
- };
- void Time:: ShowTime ()
- {
- if (Hour < 10)
- cout << "0";
- cout << Hour << ":";
- if (Min < 10)
- cout << "0";
- cout << Min << ":";
- if (Sec < 10)
- cout << "0";
- cout << Sec << "\n";
- };
- void Time:: NewTimeInFuture (int S)
- {
- if (S >= 60)
- {
- while (S >= 60)
- {
- Min++;
- S -= 60;
- }
- }
- Sec += S;
- if (Sec >= 60)
- {
- while (Sec >= 60)
- {
- Min++;
- Sec -= 60;
- }
- }
- if (Min >= 60)
- {
- while (Min >= 60)
- {
- Hour++;
- Min -= 60;
- }
- }
- if (Hour >= 24)
- {
- while (Hour >= 24)
- Hour -= 24;
- }
- ShowTime ();
- Line ();
- };
- void Time:: HowSecondsLeft ()
- {
- cout << "За эти сутки прошло " << ((Hour * 60 + Min) * 60 + Sec) << " секунд\n";
- Line ();
- };
- void Time:: NewTimeInPaste (int S)
- {
- int hours = 0, mins = 0;
- if (S >= 60)
- {
- while (S >= 60)
- {
- mins++;
- S -= 60;
- }
- }
- if (mins >= 60)
- {
- while (mins >= 60)
- {
- hours++;
- mins -= 60;
- }
- }
- if (hours >= 24)
- {
- while (hours >= 24)
- hours -= 24;
- }
- Hour -= hours;
- if (Min < mins)
- {
- Min += 60;
- Hour--;
- }
- Min -= mins;
- if (Sec < S)
- {
- Sec += 60;
- Min--;
- if (Min < 1)
- {
- Hour--;
- Min += 60;
- }
- }
- Sec -= S;
- if (Sec >= 60)
- {
- while (Sec >= 60)
- {
- Min++;
- Sec -= 60;
- }
- }
- ShowTime ();
- Line ();
- };
- int Time:: DifferenceTime (int hours, int mins, int secs)
- {
- return fabs ((((Hour * 60 + Min) * 60 + Sec)) - ((hours * 60 + mins) * 60 + secs));
- };
- int main ()
- {
- setlocale (LC_ALL, "Russian");
- int S = 0, hours = 0, mins = 0, secs = 0;
- Time time; // Создаем объект класса Time с названием time
- Line ();
- cout << "Введите количество секунд, чтобы узнать момент времени, который будет через это самое количество секунд.\n";
- while (true)
- {
- cout << "Внимание! Количество секунд должно быть строго меньше, чем " << 86400 - ((time.Hour * 60 + time.Min) * 60 + time.Sec) << " !\n";
- cin >> S;
- if (S < 86400 - ((time.Hour * 60 + time.Min) * 60 + time.Sec))
- break;
- else
- cout << "Введенное вами количество секунд превышает " << 86400 - ((time.Hour * 60 + time.Min) * 60 + time.Sec) << ",попробуйте еще раз\n\n";
- }
- time.NewTimeInFuture (S);
- time.HowSecondsLeft ();
- cout << "Введите количество секунд, чтобы узнать момент времени, который был через это самое количество секунд.\n";
- while (true)
- {
- cout << "Внимание! Количество секунд должно быть строго меньше, чем " << (time.Hour * 60 + time.Min) * 60 + time.Sec << " !\n";
- cin >> S;
- if (S < (time.Hour * 60 + time.Min) * 60 + time.Sec)
- break;
- else
- cout << "Введенное вами количество секунд превышает " << (time.Hour * 60 + time.Min) * 60 + time.Sec << ",попробуйте еще раз\n\n";
- }
- time.NewTimeInPaste (S);
- cout << "И последнее, введите повторно момент времени, дабы найти количество секунд между двумя моментами времени.\n";
- while (true) // бесконечный цикл для того, чтобы пользователь вводил данные до тех пор, пока не введет правильно
- {
- cout << "Введите время в формате ЧЧ:ММ:СС (например: 21:42:57)\n";
- cin.getline(EnterTheTime, sizeof(EnterTheTime));
- ofstream Fout ("time.txt");
- Fout << EnterTheTime; // Записываем в файл всю эту строку
- Fout.close ();
- {
- ofstream Fout ("Time.txt");
- ifstream f ("time.txt");
- while (f >> symbol)
- {
- if (symbol != ':')
- Fout << symbol; // Записываем в новый файл только числа
- if (symbol != ':' && symbol != '0' && symbol != '1' && symbol != '2' && symbol != '3' && symbol != '4' && symbol != '5' && symbol != '6' && symbol != '7' && symbol != '8' && symbol != '9')
- check = 1; // Если формат ввода не совпадает, check становится равной 1, что означает повтор цикла на ввод времени
- }
- f.close ();
- Fout.close ();
- }
- cout << "CHECK: " << check << "\n";
- ifstream f ("Time.txt");
- f >> num; // по итогу у нас получилось 6-ти значное число, например: 214257 (21:42:57)
- f.close ();
- hours = num / 10000; // делим 214257 на 10.000, и оставшаяся целая часть это количество часов = 21
- mins = num / 100; // делим 214257 на 100, и остается целая часть 2142
- mins = mins % 100; // находим числа после запятой, при делении оставшейся части (2142) на 100, и получается количество минут = 42
- secs = num % 100; // находим числа после запятой при делении 214257 на 100, тем самым находим количество секунд = 57
- if (hours > -1 && hours < 24 && mins > -1 && mins < 60 && secs > -1 && secs < 60 && !check)
- break; // если все условия соответствуют требованиям, то цикл ввода времени прекращается
- else // если же нет, то все повторяем
- {
- cout << "Введенное вами время не подходит под этот формат, попробуйте еще раз\n\n";
- if (check)
- check = 0;
- }
- }
- cout << "Разница в секундах составляет: " << time.DifferenceTime (hours, mins, secs) << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement