Биоритмы - часть 4
begin {InpDate}
repeat
Write (text);
ReadLn (d,m,y) ;
correctly := (y >= YMIN) and (Y <= YMAX) and (m >= 1)
and (m <= 12) and (d > 0) ; if correctly then
if (m = 2) and (d = 29) and (y mod 4=0) then
{Ничего не делать: это 29 февраля високосного года!}
else
correctly := d <= Size_of_Month[m] ;
if not correctly then
WriteLn (' Ошибка в дате!')
until correctly
end; {InpDate}
{--------------------------}
begin {InputDates}
repeat
InpDate (' .Введите дату рождения в формате ДД ММ ГГГГ:',d0,m0,y0) ;
InpDate (' Введите текущую дату: ',d,m,y);
{Проверяем непротиворечивость дат:}
correctly := у > у0; if not correctly and (y = y0) then
begin
correctly := m > m0;
if not correctly and (m = m0) then
correctly := d >= d0
end
until correctly
end; {InputDates}
В самом общем виде алгоритм подсчета количества дней, разделяющих две даты, описан выше. При его реализации следует учесть три возможных варианта:
- месячный младенец (год и месяц обеих дат одинаков): количество дней находится простым вычитанием двух чисел;
- годовалый младенец (год обеих дат совпадает): количество дней = (остаток дней в месяце рождения) + (количество дней в текущем месяце) + (количество дней в месяцах, разделяющих обе даты);
- общий вариант (отличаются года): количество дней = (количество дней от даты рождения до конца года) + (количество дней в разделяющих даты годах) + (количество дней от начала текущего года до текущей даты).
С учетом этого составим начальный вариант программной реализации процедуры
GET_NUMBERS_OF_DAYS :
Procedure Get_numbers_of_days (d,m,y,d,m,y: Integer;
var days: Integer);
{Определение полного количества дней, прошедших от одной даты до другой }
{--------------------------}
Procedure Variant2;
{Подсчет количества дней в месяцах,разделяющих обе даты}
begin {Variant2}
end; {Variant2}
{--------------------------}
Procedure Variant3 ;
{Подсчет количества дней в месяцах и годах, разделяющих обе