§ 16. Тип данных структура (struct)
16.3. Использование структур для описания даты и времени
Пример 16.12. Текущее время задано в часах, минутах и секундах. Который час будет через k секунд? Этапы выполнения задания I. Исходные данные: v — структура, описывающая время, k — число секунд. II. Результат: новое время. III. Алгоритм решения задачи. 1. Ввод исходных данных. 2.1. Переведем текущее время в секунды. Для этого просуммируем количество часов, умноженное на 3600 (количество секунд в часе), количество минут, умноженное на 60, и количество секунд. 3. Вывод результата. IV. Описание переменных: k – int, v – struct. Пример 16.13. Заданы две даты. Определить количество дней между ними. Этапы выполнения задания I. Исходные данные: d1, d2 — структуры, описывающие даты. II. Результат: число дней между двумя датами. III. Алгоритм решения задачи. 1. Ввод исходных данных. «math style=¨font-family:`Courier New`¨ xmlns=¨http://www.w3.org/1998/Math/MathML¨»«mstyle mathsize=¨18px¨»«mi mathvariant=¨normal¨»N«/mi»«mo»§#160;«/mo»«mo»=«/mo»«mo»§#160;«/mo»«mi mathvariant=¨normal¨»d«/mi»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msub»«mi mathvariant=¨normal¨»d«/mi»«mn»1«/mn»«/msub»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msub»«mi mathvariant=¨normal¨»d«/mi»«mn»2«/mn»«/msub»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mo».«/mo»«mo».«/mo»«mo».«/mo»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«msub»«mi mathvariant=¨normal¨»d«/mi»«mrow»«mi mathvariant=¨normal¨»m«/mi»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mn»1«/mn»«/mrow»«/msub»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mo»(«/mo»«mi mathvariant=¨normal¨»g«/mi»«mo»§#160;«/mo»«mo»-«/mo»«mo»§#160;«/mo»«mn»1900«/mn»«mo»)«/mo»«mo»§#160;«/mo»«mo»*«/mo»«mo»§#160;«/mo»«mn»365«/mn»«mo»§#160;«/mo»«mo»+«/mo»«mo»§#160;«/mo»«mo»(«/mo»«mi mathvariant=¨normal¨»g«/mi»«mo»§#160;«/mo»«mo»§#8211;«/mo»«mo»§#160;«/mo»«mn»1900«/mn»«mo»)«/mo»«mo»/«/mo»«mn»4«/mn»«mo»,«/mo»«/mstyle»«/math» где d — номер дня в дате, d1, d2, ... dm - 1 — количество дней в месяцах, предшествующих заданному, (y – 1900) * 365 — количество дней за полный прошедший год до текущей даты, (g – 1900)/4 — количество дней, которые нужно добавить за прошедшие високосные годы. Формула буде верной для дат от 01.01.1900 до 28.02.2100. (2100 год не является високосным, поскольку 2100 делится на 100, но не делится на 400). 3. Создадим функцию date_to_int. |
Пример 16.12. V. Программа:
VI. Тестирование. Пример 16.13. V. Программа:
VI. Тестирование. В функции преобразования необходима дополнительная проверка для случая, если текущий год является високосным. Тогда дополнительный номер должен быть добавлен только к датам после 28 февраля. 1900 г. исключается, поскольку он не является високосным. |