Pers.narod.ru. Алгоритмы. Программно вычисляем время+(-)минуты=новое время |
Этот простой расчёт, скорее всего, не потребует вызова стандартных функций для
сложения/вычитания единиц времени, каковых в большинстве языков, к тому же, нет. Итак, задано время 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;
- тоже должно работать.
|
|