Advertisement
DeD_M1sha

Untitled

Jan 15th, 2017
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cmath>
  4. using namespace std;
  5. char EnterTheTime[255];
  6. char symbol;
  7. int num = 0;
  8. bool check = 0;
  9. void Line ()
  10. {
  11.     cout << "\n---------------------------------------------------------\n";
  12. } // Эта линия для лучшей видимости вывода
  13. class Time
  14. {
  15.     public:
  16.     int Hour, Min, Sec;
  17.     Time ();
  18.     void ShowTime (); // Объявление метода, который будет отображать время в правильном формате
  19.     void NewTimeInFuture (int); // Объявление метода, который отобразит момент времени через S секунд, величина S меньше количества оставшихся до конца суток секунд
  20.     void HowSecondsLeft (); // Объявление метода, который отобразит количество пройденных секунд за эти сутки
  21.     void NewTimeInPaste (int); // Объявление метода, который отобразит момент времени через S секунд, величина S меньше количества прошедших после начала суток секунд
  22.     int DifferenceTime (int, int, int); // Объявление метода, который вернет нам разницу двух моментов времени
  23. };
  24. Time:: Time ()
  25. {
  26.     Hour = -1, Min = -1, Sec = -1;
  27.     while (true) // бесконечный цикл для того, чтобы пользователь вводил данные до тех пор, пока не введет правильно
  28.         {
  29.             cout << "Введите время в формате ЧЧ:ММ:СС (например: 21:42:57)\n";
  30.             cin.getline(EnterTheTime, sizeof(EnterTheTime));
  31.             ofstream Fout ("time.txt");
  32.             Fout << EnterTheTime; // Записываем в файл всю эту строку
  33.             Fout.close ();
  34.             {
  35.                 ofstream Fout ("Time.txt");
  36.                 ifstream f ("time.txt");
  37.                     while (f >> symbol)
  38.                     {
  39.                         if (symbol != ':')
  40.                             Fout << symbol; // Записываем в новый файл только числа
  41.                         if (symbol != ':' && symbol != '0' && symbol != '1' && symbol != '2' && symbol != '3' && symbol != '4' && symbol != '5' && symbol != '6' && symbol != '7' && symbol != '8' && symbol != '9')
  42.                             check = 1; // Если формат ввода не совпадает, check становится равной 1, что означает повтор цикла на ввод времени
  43.                     }
  44.                 f.close ();
  45.                 Fout.close ();
  46.             }
  47.             ifstream f ("Time.txt");
  48.             f >> num; // по итогу у нас получилось 6-ти значное число, например: 214257 (21:42:57)
  49.             f.close ();
  50.             Hour = num / 10000; // делим 214257 на 10.000, и оставшаяся целая часть это количество часов = 21
  51.             Min = num / 100; // делим 214257 на 100, и остается целая часть 2142
  52.             Min = Min % 100; // находим числа после запятой, при делении оставшейся части (2142) на 100, и получается количество минут = 42
  53.             Sec = num % 100; // находим числа после запятой при делении 214257 на 100, тем самым находим количество секунд = 57
  54.                 if (Hour > -1 && Hour < 24 && Min > -1 && Min < 60 && Sec > -1 && Sec < 60 && !check)
  55.                     break; // если все условия соответствуют требованиям, то цикл ввода времени прекращается
  56.                 else // если же нет, то все повторяем
  57.                 {
  58.                     cout << "Введенное вами время не подходит под этот формат, попробуйте еще раз\n\n";
  59.                         if (check)
  60.                             check = 0;
  61.                 }
  62.         }
  63. };
  64. void Time:: ShowTime ()
  65. {
  66.         if (Hour < 10)
  67.             cout << "0";
  68.     cout << Hour << ":";
  69.         if (Min < 10)
  70.             cout << "0";
  71.     cout << Min << ":";
  72.         if (Sec < 10)
  73.             cout << "0";
  74.     cout << Sec << "\n";
  75. };
  76. void Time:: NewTimeInFuture (int S)
  77. {
  78.         if (S >= 60)
  79.         {
  80.             while (S >= 60)
  81.             {
  82.                 Min++;
  83.                 S -= 60;
  84.             }
  85.         }
  86.     Sec += S;
  87.         if (Sec >= 60)
  88.         {
  89.             while (Sec >= 60)
  90.             {
  91.                 Min++;
  92.                 Sec -= 60;
  93.             }
  94.         }
  95.         if (Min >= 60)
  96.         {
  97.             while (Min >= 60)
  98.             {
  99.                 Hour++;
  100.                 Min -= 60;
  101.             }
  102.         }
  103.         if (Hour >= 24)
  104.         {
  105.             while (Hour >= 24)
  106.                 Hour -= 24;
  107.         }
  108.     ShowTime ();
  109.     Line ();
  110. };
  111. void Time:: HowSecondsLeft ()
  112. {
  113.     cout << "За эти сутки прошло " << ((Hour * 60 + Min) * 60 + Sec) << " секунд\n";
  114.     Line ();
  115. };
  116. void Time:: NewTimeInPaste (int S)
  117. {
  118.     int hours = 0, mins = 0;
  119.         if (S >= 60)
  120.         {
  121.             while (S >= 60)
  122.             {
  123.                 mins++;
  124.                 S -= 60;
  125.             }
  126.         }
  127.         if (mins >= 60)
  128.         {
  129.             while (mins >= 60)
  130.             {
  131.                 hours++;
  132.                 mins -= 60;
  133.             }
  134.         }
  135.         if (hours >= 24)
  136.         {
  137.             while (hours >= 24)
  138.                 hours -= 24;
  139.         }
  140.     Hour -= hours;
  141.         if (Min < mins)
  142.         {
  143.             Min += 60;
  144.             Hour--;
  145.         }
  146.     Min -= mins;
  147.         if (Sec < S)
  148.         {
  149.             Sec += 60;
  150.             Min--;
  151.                 if (Min < 1)
  152.                 {
  153.                     Hour--;
  154.                     Min += 60;
  155.                 }
  156.         }
  157.     Sec -= S;
  158.         if (Sec >= 60)
  159.         {
  160.             while (Sec >= 60)
  161.             {
  162.                 Min++;
  163.                 Sec -= 60;
  164.             }
  165.         }
  166.     ShowTime ();
  167.     Line ();
  168. };
  169. int Time:: DifferenceTime (int hours, int mins, int secs)
  170. {
  171.     return fabs ((((Hour * 60 + Min) * 60 + Sec)) - ((hours * 60 + mins) * 60 + secs));
  172. };
  173. int main ()
  174. {
  175.     setlocale (LC_ALL, "Russian");
  176.     int S = 0, hours = 0, mins = 0, secs = 0;
  177.     Time time; // Создаем объект класса Time с названием time
  178.     Line ();
  179.     cout << "Введите количество секунд, чтобы узнать момент времени, который будет через это самое количество секунд.\n";
  180.         while (true)
  181.         {
  182.             cout << "Внимание! Количество секунд должно быть строго меньше, чем " << 86400 - ((time.Hour * 60 + time.Min) * 60 + time.Sec) << " !\n";
  183.             cin >> S;
  184.                 if (S < 86400 - ((time.Hour * 60 + time.Min) * 60 + time.Sec))
  185.                     break;
  186.                 else
  187.             cout << "Введенное вами количество секунд превышает " << 86400 - ((time.Hour * 60 + time.Min) * 60 + time.Sec) << ",попробуйте еще раз\n\n";
  188.         }
  189.     time.NewTimeInFuture (S);
  190.     time.HowSecondsLeft ();
  191.     cout << "Введите количество секунд, чтобы узнать момент времени, который был через это самое количество секунд.\n";
  192.         while (true)
  193.         {
  194.             cout << "Внимание! Количество секунд должно быть строго меньше, чем " << (time.Hour * 60 + time.Min) * 60 + time.Sec << " !\n";
  195.             cin >> S;
  196.                 if (S < (time.Hour * 60 + time.Min) * 60 + time.Sec)
  197.                     break;
  198.                 else
  199.             cout << "Введенное вами количество секунд превышает " << (time.Hour * 60 + time.Min) * 60 + time.Sec << ",попробуйте еще раз\n\n";
  200.         }
  201.     time.NewTimeInPaste (S);
  202.     cout << "И последнее, введите повторно момент времени, дабы найти количество секунд между двумя моментами времени.\n";
  203.     while (true) // бесконечный цикл для того, чтобы пользователь вводил данные до тех пор, пока не введет правильно
  204.         {
  205.             cout << "Введите время в формате ЧЧ:ММ:СС (например: 21:42:57)\n";
  206.             cin.getline(EnterTheTime, sizeof(EnterTheTime));
  207.             ofstream Fout ("time.txt");
  208.             Fout << EnterTheTime; // Записываем в файл всю эту строку
  209.             Fout.close ();
  210.             {
  211.                 ofstream Fout ("Time.txt");
  212.                 ifstream f ("time.txt");
  213.                     while (f >> symbol)
  214.                     {
  215.                         if (symbol != ':')
  216.                             Fout << symbol; // Записываем в новый файл только числа
  217.                         if (symbol != ':' && symbol != '0' && symbol != '1' && symbol != '2' && symbol != '3' && symbol != '4' && symbol != '5' && symbol != '6' && symbol != '7' && symbol != '8' && symbol != '9')
  218.                             check = 1; // Если формат ввода не совпадает, check становится равной 1, что означает повтор цикла на ввод времени
  219.                     }
  220.                 f.close ();
  221.                 Fout.close ();
  222.             }
  223.             cout << "CHECK: " << check << "\n";
  224.             ifstream f ("Time.txt");
  225.             f >> num; // по итогу у нас получилось 6-ти значное число, например: 214257 (21:42:57)
  226.             f.close ();
  227.             hours = num / 10000; // делим 214257 на 10.000, и оставшаяся целая часть это количество часов = 21
  228.             mins = num / 100; // делим 214257 на 100, и остается целая часть 2142
  229.             mins = mins % 100; // находим числа после запятой, при делении оставшейся части (2142) на 100, и получается количество минут = 42
  230.             secs = num % 100; // находим числа после запятой при делении 214257 на 100, тем самым находим количество секунд = 57
  231.                 if (hours > -1 && hours < 24 && mins > -1 && mins < 60 && secs > -1 && secs < 60 && !check)
  232.                     break; // если все условия соответствуют требованиям, то цикл ввода времени прекращается
  233.                 else // если же нет, то все повторяем
  234.                 {
  235.                     cout << "Введенное вами время не подходит под этот формат, попробуйте еще раз\n\n";
  236.                         if (check)
  237.                             check = 0;
  238.                 }
  239.         }
  240.     cout << "Разница в секундах составляет: " << time.DifferenceTime (hours, mins, secs) << "\n";
  241.     return 0;
  242. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement