diff --git a/tasks/05/README.md b/tasks/05/README.md
index 14ff3a48..c31ba5f5 100644
--- a/tasks/05/README.md
+++ b/tasks/05/README.md
@@ -539,7 +539,7 @@ public:
4 |
- |
+ - |
|
@@ -605,18 +605,425 @@ public:
-Результат выполнения арифметических операций, в которых один из аргументов является невалидным значением, должен также давать невалидное значение времени (см. примечание).
+Результат выполнения арифметических операций, в которых один из аргументов является невалидным значением,
+должен также давать невалидное значение времени (см. примечание).
-При выходе результата после выполнения операций за пределы диапазона 00:00:00 – 23:59:59 приводить результат к этому диапазону. Например:
+При выходе результата после выполнения операций за пределы диапазона 00:00:00 – 23:59:59 приводить результат к этому диапазону.
+Например:
- 23:59:59 + 00:00:03 = 00:00:02
- 00:00:05 – 00:00:10 = 23:59:55
-**Подсказка**: данный класс будет проще реализовать, если вместо трех приватных переменных (часы, минуты и секунды) вы будете использовать только одну единственную переменную для хранения секунд после полуночи и все операции производить над нею.
+**Подсказка**: данный класс будет проще реализовать, если вместо трех приватных переменных (часы, минуты и секунды)
+вы будете использовать только одну единственную переменную для хранения секунд после полуночи и
+все операции производить над нею.
-**Примечание**: если проводить валидацию параметров в конструкторе и выбрасывать исключение в случае ошибки, то метод IsValid реализовывать не нужно. Автоматически решится проблема с выполнением арифметических операций, в которых участвуют невалидные значения времени.
+**Примечание**: если проводить валидацию параметров в конструкторе и выбрасывать исключение в случае ошибки,
+то метод IsValid реализовывать не нужно. Автоматически решится проблема с выполнением арифметических операций,
+в которых участвуют невалидные значения времени.
-В процессе разработки класса использование подхода TDD обязательно. Без автоматических тестов работа будет принята с коэффициентом 0.5.
+В процессе разработки класса использование подхода TDD обязательно.
+Без автоматических тестов работа будет принята с коэффициентом 0.5.
+
+Разработайте программу, использующую разработанный Вами класс `CTime`,
+которая обрабатывает команды пользователя, вводимые им со стандартного потока ввода:
+
+Инкремент и декремент времени:
+
+- `++ HH:MM:SS`. Увеличивает время на 1 секунду.
+- `-- HH:MM:SS`. Уменьшает время на 1 секунду.
+
+Арифметические операции над временем:
+
+- `+ HH:MM:SS HH:MM:SS`. Выполняет сложение двух времён.
+- `- HH:MM:SS HH:MM:SS`. Вычитание одного времени из другого.
+- `+= HH:MM:SS HH:MM:SS`. Добавление времени к текущему.
+- `-= HH:MM:SS HH:MM:SS`. Вычитание времени из текущего.
+- `* HH:MM:SS N`. Умножает время на целое число и наоборот.
+- `divByNumber HH:MM:SS N`. Делит время на целое число.
+- `divByTime HH:MM:SS HH:MM:SS`. Выполняет целочисленное деление одного времени на другое.
+- `*= HH:MM:SS N`. Умножение текущего времени на целое число.
+- `/= HH:MM:SS N`. Деление текущего времени на целое число.
+
+Ввод и вывод времени:
+
+- `fromSeconds SECONDS`. Устанавливает время как количество секунд от полуночи и выводит его в формате HH:MM:SS.
+
+Операторы сравнения времени:
+
+- `== HH:MM:SS HH:MM:SS`. Проверяет равенство двух временных значений.
+- `!= HH:MM:SS HH:MM:SS`. Проверяет неравенство двух временных значений.
+- `< HH:MM:SS HH:MM:SS`. Проверяет, является ли первое значение времени меньше второго.
+- `> HH:MM:SS HH:MM:SS`. Проверяет, является ли первое значение времени больше второго.
+- `<= HH:MM:SS HH:MM:SS`. Проверяет, является ли первое значение времени меньше или равно второму.
+- `>= HH:MM:SS HH:MM:SS`. Проверяет, является ли первое значение времени больше или равно второму.
+
+##### Формат входных данных
+
+Входные данные представляют собой команды, вводимые пользователем через стандартный поток ввода (stdin).
+Каждая строка ввода содержит одну команду и соответствующие параметры, разделенные пробелами.
+Форматы для каждой команды приведены выше.
+
+##### Формат выходных данных
+
+Результаты выполнения команд выводятся в стандартный поток вывода (stdout). Формат зависит от команды:
+
+Инкремент и декремент времени:
+
+- Для команды `++ HH:MM:SS` выводится **4** значения:
+ 1. Значение, возвращённое префиксной операцией в формате `HH:MM:SS`.
+ 2. Значение объекта после префиксной операции в формате `HH:MM:SS`.
+ 3. Значение, возвращённое постфиксной операцией в формате `HH:MM:SS`.
+ 4. Значение объекта после постфиксной операции в формате `HH:MM:SS`.
+
+- Для команды `-- HH:MM:SS` выводится **4** значения:
+ 1. Значение, возвращённое префиксной операцией в формате `HH:MM:SS`.
+ 2. Значение объекта после префиксной операции в формате `HH:MM:SS`.
+ 3. Значение, возвращённое постфиксной операцией в формате `HH:MM:SS`.
+ 4. Значение объекта после постфиксной операции в формате `HH:MM:SS`.
+
+Арифметические операции над временем:
+
+- Для операций сложения и вычитания (`+ HH:MM:SS HH:MM:SS`, `- HH:MM:SS HH:MM:SS`), результат выводится в формате `HH:MM:SS`.
+- Для операций добавления и вычитания времени из текущего значения (`+= HH:MM:SS HH:MM:SS`, `-= HH:MM:SS HH:MM:SS`),
+результат выводится в формате `HH:MM:SS`.
+
+- Для умножения на целое число (`* HH:MM:SS N`) выводится **2** значения:
+ 1. Результат умножения числа на время (`N * HH:MM:SS`) в формате `HH:MM:SS`.
+ 2. Результат умножения времени на число (`HH:MM:SS * N`) в формате `HH:MM:SS`.
+
+- Для деления времени на целое число (`divByNumber HH:MM:SS N`), результат выводится в формате `HH:MM:SS`.
+- Для целочисленного деления одного времени на другое (`divByTime HH:MM:SS HH:MM:SS`),
+результат выводится в виде **целого числа**.
+- Для операций умножения и деления текущего времени на число (`*= HH:MM:SS N`, `/= HH:MM:SS N`), результат
+выводится в формате `HH:MM:SS`.
+
+Ввод и вывод времени:
+
+- Для команды `fromSeconds SECONDS` время выводится в формате `HH:MM:SS`.
+
+Операторы сравнения времени:
+
+- Для всех операций сравнения между двумя временами, результат выводится в виде одного из двух значений: `true` или `false`.
+
+Обработка ошибок:
+
+- Если входные данные некорректны (например, содержат нечисловые значения или неверный формат времени),
+программа должна выводить в стандартный поток вывода «**INVALID**» и продолжать выполнение.
+
+##### Примеры входных и выходных данных
+
+###### Пример 1
+
+Ввод:
+
+```txt
+++ 23:59:59
+++ 25:00:00
+```
+
+Вывод:
+
+```txt
+00:00:00
+00:00:00
+00:00:00
+00:00:01
+INVALID
+```
+
+Объяснение: Время увеличивается на 1 секунду, переходя через полночь. Второй ввод некорректен,
+так как часы не могут быть больше 24.
+
+###### Пример 2
+
+Ввод:
+
+```txt
+-- 00:00:00
+-- 00:60:00
+```
+
+Вывод:
+
+```txt
+23:59:59
+23:59:59
+23:59:59
+23:59:58
+INVALID
+```
+
+Объяснение: Время уменьшается на 1 секунду, переходя через полночь. Второй ввод некорректен,
+так как минуты не могут быть больше 59.
+
+###### Пример 3
+
+Ввод:
+
+```txt
++ 14:30:25 03:18:44
++ 14:30:25 invalid_time
+```
+
+Вывод:
+
+```txt
+17:49:09
+INVALID
+```
+
+Объяснение: Время складывается, получая новый результат. Второй ввод некорректен,
+так как одно из времён имеет неправильный формат.
+
+###### Пример 4
+
+Ввод:
+
+```txt
+- 14:30:25 03:18:44
+```
+
+Вывод:
+
+```txt
+11:11:41
+```
+
+Объяснение: Одно время вычитается из другого.
+
+###### Пример 5
+
+Ввод:
+
+```txt
++= 14:30:25 03:18:44
+```
+
+Вывод:
+
+```txt
+17:49:09
+```
+
+Объяснение: К текущему времени добавляется указанное.
+
+###### Пример 6
+
+Ввод:
+
+```txt
+-= 14:30:25 03:18:44
+```
+
+Вывод:
+
+```txt
+11:11:41
+```
+
+Объяснение: Из текущего времени вычитается указанное.
+
+###### Пример 7
+
+Ввод:
+
+```txt
+* 03:05:15 3
+```
+
+Вывод:
+
+```txt
+09:15:45
+09:15:45
+```
+
+Объяснение: Время умножается на число в обеих формах.
+
+###### Пример 8
+
+Ввод:
+
+```txt
+divByNumber 09:15:40 3
+divByNumber 10:00:00 0
+```
+
+Вывод:
+
+```txt
+03:05:13
+INVALID
+```
+
+Объяснение: Время делится на число. Второй ввод некорректен, так как деление на ноль невозможно.
+
+###### Пример 9
+
+Ввод:
+
+```txt
+divByTime 09:15:40 03:05:13
+```
+
+Вывод:
+
+```txt
+3
+```
+
+Объяснение: Выполняется целочисленное деление времени на время.
+
+###### Пример 10
+
+Ввод:
+
+```txt
+*= 03:05:15 3
+```
+
+Вывод:
+
+```txt
+09:15:45
+```
+
+Объяснение: Текущее время умножается на число.
+
+###### Пример 11
+
+Ввод:
+
+```txt
+/= 09:15:45 3
+```
+
+Вывод:
+
+```txt
+03:05:15
+```
+
+Объяснение: Текущее время делится на число.
+
+###### Пример 12
+
+Ввод:
+
+```txt
+fromSeconds 3661
+fromSeconds -100
+```
+
+Вывод:
+
+```txt
+01:01:01
+INVALID
+```
+
+Объяснение: Время задается количеством секунд от полуночи. Второй ввод некорректен,
+так как количество секунд не может быть отрицательным.
+
+###### Пример 13
+
+Ввод:
+
+```txt
+== 14:30:25 14:30:25
+== 14:30:25 14:30:60
+```
+
+Вывод:
+
+```txt
+true
+INVALID
+```
+
+Объяснение: Время одинаковое, поэтому результат - true. Второй ввод некорректен,
+так как 60 секунд в минуте - недопустимое значение.
+
+###### Пример 14
+
+Ввод:
+
+```txt
+!= 14:30:25 15:30:25
+```
+
+Вывод:
+
+```txt
+true
+```
+
+Объяснение: Время не одинаковое , поэтому результат - true.
+
+###### Пример 15
+
+Ввод:
+
+```txt
+< 14:30:25 15:30:25
+```
+
+Вывод:
+
+```txt
+true
+```
+
+Объяснение: Первое время меньше второго, поэтому результат - true.
+
+###### Пример 16
+
+Ввод:
+
+```txt
+> 14:30:25 15:30:25
+```
+
+Вывод:
+
+```txt
+false
+```
+
+Объяснение: Первое время меньше второго, поэтому результат - false.
+
+###### Пример 17
+
+Ввод:
+
+```txt
+<= 14:30:25 15:30:25
+```
+
+Вывод:
+
+```txt
+true
+```
+
+Объяснение: Первое время меньше или равно второму, результат - true.
+
+###### Пример 18
+
+Ввод:
+
+```txt
+>= 15:30:25 15:30:25
+```
+
+Вывод:
+
+```txt
+true
+```
+
+Объяснение: Первое время больше или равно второму, результат - true.
#### Вариант 5. До 220 баллов