БлогNot. Программно вычисляем время+(-)минуты=новое время

Программно вычисляем время+(-)минуты=новое время

Странно, что такой простой расчёт вызвал затруднения у вроде бы программеров, искали какие-то отсутствующие функции... Итак, задано время h часов m минут, нужно прибавить или вычесть d минут и получить новое время h2 часов m2 минут, где h2 принадлежит диапазону 0-23, а m2 - диапазону 0-59, при этом переход совершается не обязательно в течение суток.

Простейшая написанная за пару минут реализация алгоритма может быть такой (Free Pascal):

var h,m,d,t,h2,m2:integer;
begin
 h:=23; {Часы}
 m:=50; {Минуты}
 d:=1460; {Прибавить минут (или вычесть, если число d<0)}
 t:= h*60+m+d; {Переводим всё в минуты}
 while t<0 do t:=1440+t; {Учитываем переход через сутки}
 h2:= t div 60; {Новые часы}
 m2:= t-h2*60; {Новые минуты}
 h2:= h2 mod 24; {Часы переводим в диапазон 0-23}
 writeln ('Задано время ',h:2,':',m:2,', прибавили минут: ',d,
  ' получили время ',h2:2,':',m2:2);
 readln;
end.

Все действия видны в листинге, думаю, приведённый алгоритм нетрудно перевести на другие языки (операция div - деление нацело, mod - взятие остатка от деления, описаны, например, здесь). Паскаль не добавит лидирующие нули при выводе часов или минут, меньших 10, но этого легко добиться в более развитых языках.

Наверное, строчку с циклом while лучше заменить на условный оператор

if t<0 then begin
 t:=t+(-t div 1440)*1440;
 t:=1440+t;
end;

- тоже должно работать.

 Если где-то ошибся, исправления будут на постоянной странице статьи

10.07.2012, 14:46 [9647 просмотров]


теги: алгоритм время pascal

К этой статье пока нет комментариев, Ваш будет первым