Type Dat = record d: integer; m: integer; y: integer end;
function jday(pd: Dat): longint; // Алгоритм 199б // "Переход от календарной даты к порядковому номеру дня и обратно" // взят из сборника // "Библиотека алгоритмов 151б-200б", М.И.Агеев и др., // М.: Радио и связь, 1981 // // Алгоритм возвращает порядковый номер дня по Юлианскому календарю. // Работает для дат, начиная с 01.01.4713 до н.э. var c, ya: longint; begin with pd do begin if m > 2 then m := m - 3 else begin m := m + 9; y := y - 1 end; c := y div 100; ya := y mod 100; Result := ((146097 * c) div 4) + ((1461 * ya) div 4) + ((153 * m + 2) div 5) + d + 1721119 end; end;
function jdate(j: longint): Dat; // Алгоритм 199б // "Переход от календарной даты к порядковому номеру дня и обратно" // взят из сборника // "Библиотека алгоритмов 151б-200б", М.И.Агеев и др., // М.: Радио и связь, 1981 // // Алгоритм возвращает дату григорианского календаря по // порядковому номеру дня Юлианского календаря. // Работает для дат, начиная с 01.01.4713 до н.э. var dd, mm, yy: integer;
begin j := j - 1721119; yy := (4 * j - 1) div 146097; dd := (4 * j - 1 - 146097 * yy) div 4; j := (4 * dd + 3) div 1461; dd := (4 * dd + 7 - 1461 * j) div 4; mm := (5 * dd - 3) div 153; dd := (5 * dd + 2 - 153 * mm) div 5; yy := 100 * yy + j; if mm < 10 then mm := mm + 3 else begin mm := mm - 9; yy := yy + 1 end; Result.d := dd; Result.m := mm; Result.y := yy end;
var d1,d2: Dat; begin Writeln('Введите дату рождения в формате <день месяц год>: '); Read(d1.d, d1.m, d1.y); d2:=jdate(jday(d1)+5000); Writeln('5000 дней прожито ',d2.d,'.',d2.m,'.',d2.y) end.
<em><u>Тестовое решение:</u></em> Введите дату рождения в формате <день месяц год>: 9 10 1997 5000 дней прожито 18.6.2011