Исходная дата представлена так:
type
  TDate = record  day: [1..31];  month: [1..12]; year: word;
  end;

program Date2;

type
  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 • Просмотров [ 2690 ]