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;

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

Рейтинг@Mail.ru

вверх гостевая; E-mail
Hosted by uCoz