Исходная дата представлена так:
type
TDate = record day: [1..31]; month: [1..12]; year: word;
end;
program Date2;
TDate = record
day: 1..31;
month: 1..12;
year: word;
end;
var
srcdate, curdate: TDate;
(*----------------------------------------
Функция проверяет, является ли
год високосным
----------------------------------------*)
function VisokosnyGod (n: integer): boolean;
begin
if (((n mod 400)=0) or (((n mod 4)=0) and ((n mod 100) <> 0))) then
VisokosnyGod := TRUE
else
VisokosnyGod := FALSE;
end;
(*----------------------------------------
Функция проверяет, правильно ли
задан день в зависимости от
месяца и года
----------------------------------------*)
function CheckDayOfMonth (day, month, year: integer): boolean;
begin
if ((day>30)and(month in [2,4,6,9,11])) or
((day>29)and(month=2)) or
((day>28)and(month=2)and(not VisokosnyGod(year))) then
CheckDayOfMonth:=false
else
CheckDayOfMonth:=true;
end;
(*----------------------------------------
Процедура ввода даты с защитой
от дурака
----------------------------------------*)
procedure EnterDate (var d: TDate);
var
n: integer;
dayOk: boolean;
begin
write('Год: ');
readln(d.year);
repeat
write('Месяц (1..12): ');
readln(n);
if (n<1)or(n>12) then
writeln('Ошибка! Номер месяца должен находиться в диапазоне 1..12');
until (n>0)and(n<13);
d.month:=n;
repeat
dayOk:=true;
write('День (1..31): ');
readln(n);
if (n<1)or(n>31)or(not CheckDayOfMonth(n, d.month, d.year)) then begin
writeln('Ошибка! День не может иметь такое значение для выбранных '+
'года и месяца. Выберите другой день');
dayOk:=false;
end;
until dayOk;
d.day:=n;
end;
(*----------------------------------------
Функция возвращает количество
дней от начала эры до указанной
даты
----------------------------------------*)
function DaysFromZero (d, m, y: integer): longint;
begin
if m>2 then
m := m+1
else begin
m := m+13;
y := y-1;
end;
DaysFromZero := trunc(36525*y/100+306*m/10+d);
end;
begin
writeln('Программа возвращает количество дней между заданной '+
'датой и текущей');
writeln('Введите сегодняшнее число');
EnterDate(curdate);
writeln('Введите интересующую вас дату');
EnterDate(srcdate);
writeln('Заданная дата: ',srcdate.day,'.',srcdate.month,'.',srcdate.year);
writeln('Сегоднящняя дата: ',curdate.day,'.',curdate.month,'.',curdate.year);
writeln('Количество дней между этими датами = ',
abs(DaysFromZero(curdate.day, curdate.month, curdate.year)-
DaysFromZero(srcdate.day, srcdate.month, srcdate.year)));
writeln('Нажмите [Enter] для завершения программы');
readln;
end.
2009-03-06 • Просмотров [ 3813 ]