Сложение времени вида xx:xx (Определить время прибытия поезда) - C (СИ)
Формулировка задачи:
Встала необходимость в сложении 2х времен, например время отправления поезда - 21:30 а время в пути - 06:59 Нужно определить время прибытия поезда (не обязательно указывать что это следующий день, необходимо просто определить время). Есть ли стандартная функция для решения данной задачи или какой-нибудь алгоритм? Поиски в гугле безуспешны
Решение задачи: «Сложение времени вида xx:xx (Определить время прибытия поезда)»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> int add_time(char *result, char *time0, char *add_time) { int time_hours, time_minutes, add_time_hours, add_time_minutes, m, new_minutes, new_hours; if (strlen(time0)!=5 || strlen(add_time)!=5) return 0; if (time0[2]!=':' || add_time[2]!=':') return 0; time0[2]=0; time_hours=atoi(time0); time_minutes=atoi(time0+3); add_time[2]=0; add_time_hours=atoi(add_time); add_time_minutes=atoi(add_time+3); m=time_minutes+add_time_minutes; new_minutes = m%60; new_hours=(time_hours+add_time_hours+(int)(m/60))%24; sprintf(result, "%02d:%02d", new_hours, new_minutes); return 1; } void main() { char r[6]; if (add_time(r, "19:49", "00:11")) printf("\n%s",r); if (add_time(r, "12:35", "12:25")) printf("\n%s",r); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
- #include
для работы с функцией вывода на экран; - #include
для работы со строками; - #include
для работы с функцией atoi, которая преобразует строку в целое число.
- #include
- Определяем функцию add_time:
- Аргументы функции: указатель на результат, указатель на первую строку времени и указатель на вторую строку времени.
- Используем функцию atoi для преобразования строки в целые числа, значения которых будут использоваться для дальнейших вычислений.
- Проверяем корректность ввода: длины строк времени должны быть равны 5 символам, третий символ каждой строки должен быть двоеточием.
- Если условия не выполняются, возвращаем 0.
- Если условия выполняются, преобразуем строки времени в целые числа, записываем их в соответствующие переменные.
- Вычисляем общее количество минут и часов, добавляя минуты и часы из обеих строк времени.
- Полученное значение минут берем по модулю 60 для получения нового значения минут.
- Полученное значение часов берем по модулю 24 для получения нового значения часов.
- Используем функцию sprintf для формирования итоговой строки времени в формате
часы:минуты
. - Возвращаем 1.
- Определяем основную функцию программы main:
- Создаем массив-строку r для хранения результата.
- Проверяем, что функция add_time вернула 1, иначе выводим сообщение об ошибке и завершаем работу программы.
- Если условие выполняется, выводим результат на экран.
- Выполняем тестовые вычисления:
- Первый тест: время первой строки
19:49
, время второй строки00:11
. Результат20:00
. - Второй тест: время первой строки
12:35
, время второй строки12:25
. Результат24:00
.
- Первый тест: время первой строки
- Запускаем программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д