Описать функцию подсчитывающую сколько дней прошло от первого января 2005 года до даты d этого года. - Turbo Pascal
Формулировка задачи:
Дан массив записи, представляющий собой календарь(число,месяц,год). Описать функцию подсчитывающую сколько дней прошло от первого января 2005 года до даты d этого года.
Решение задачи: «Описать функцию подсчитывающую сколько дней прошло от первого января 2005 года до даты d этого года.»
textual
Листинг программы
function Julian(y, m, d: Integer): Longint;
begin
if m>2 then Dec(m,3)
else begin
Inc(m,9); Dec(y);
end;
Julian:=
146097*(y div 100) div 4 +
1461 *(y mod 100) div 4 +
(153*m+2) div 5+d+1721119;
end;
type
TDate = record
d, m: ShortInt; y: Integer;
end;
var
d: array [1..5] of TDate;
i: Integer; d0: Longint;
begin
d0:=Julian(2005,1,1);
WriteLn('Введите даты в виде ДД ММ ГГГГ (',High(d)-Low(d)+1,'):');
for i:=Low(d) to High(d) do with d[i] do Read(d,m,y);
WriteLn('От 01.01.2015:');
for i:=Low(d) to High(d) do with d[i] do WriteLn(d:2,'.',m:2,'.',y:4,' : ',Julian(y,m,d)-d0);
end.
Объяснение кода листинга программы
- Функция
Julianпринимает три параметра:y(год),m(месяц) иd(день). Она вычисляет количество дней между первым января указанного года и указанной датой. - Если
mбольше 2, то функция увеличивает месяц на 3. В противном случае, она увеличивает год на 1 и уменьшает месяц на 9. - Функция возвращает сумму: 146097 (год / 100) / 4 + 1461 (год % 100) / 4 + (153 * месяц + 2) / 5 + день + 1721119.
- Тип
TDateпредставляет собой запись с полями:d(день),m(месяц) иy(год). - Переменная
dпредставляет собой массив из 5 записей типаTDate. - Переменная
iявляется счетчиком для цикла, который будет использоваться для чтения дат. - Переменная
d0инициализируется значением функцииJulian(2005,1,1). - Выводится приглашение пользователю ввести даты в виде ДД ММ ГГГГ.
- Для каждой записи в массиве
dсчитывается год, месяц и день из ввода пользователя. - Выводится сообщение с датой и разницей в днях до указанной даты.
- Цикл завершается, когда пользователь вводит некорректные данные или достигает конца массива
d.