Иллюстрированный самоучитель по Tirbo Pascal


Биоритмы - часть 2


begin {Get_count_of_days} 

end; {Get_count_of_days}

{--------------------------}

Procedure FindMaxMin (var dmin,dmax: Integer; days: Integer);

{Ищет критические дни}  

begin {FindMaxMin} 

end; {FindMaxMin}

{--------------------------}

Procedure WriteDates ( dmin , dmax , days : Integer);

{Определяет критические даты по количеству дней, прошедших от

момента рождения, и выдает эти даты на экран}

begin {WriteDates}

end; {WriteDates}

{--------------------------}

var

d0,d , {Дни рождения и текущий}

m0,m, {Месяцы рождения и текущий}

у0,у, {Годы рождения и текущий}

dmin, {Наименее благоприятный день}

dmax, {Наиболее благоприятный день}

days: Integer; {Количество дней от рождения} 

begin {Главная программа}

Input-Dates (d0,m0,y0,d,m,y) ;

Get_numbers_of_days (d0,m0,y0,d,m,y,days) ;

FindMaxMin (dmin, dmax, days) ;

WriteDates (dmin, dmax, days) 

end .

Начинаем детализацию программы. Прежде всего подумаем, как по двум датам вычислить разделяющее их количество дней? Если вспомнить, что следует учитывать неодинаковое количество дней по месяцам года, а также 29 февраля для високосных лет, то ответ на этот вопрос окажется не таким уж простым. Предлагаемый алгоритм подсчета количества дней заключается в вычислении количества дней от даты рождения до конца месяца, а затем и года рождения, количества дней, от начала текущего года до текущего месяца и текущей даты, а также - в подсчете количества полных лет, разделяющих обе даты. Количество лет затем легко пересчитывается в количество дней с учетом длины года (365 дней для обычных и 366 дней для високосных лет). Это очень прямолинейный алгоритм, но, откровенно говоря, мне не пришло в голову ничего другого. Возможно, существует более изящный способ подсчета и Вы его знаете, тогда программная реализация будет другой.

Упростить алгоритм можно за счет создания и использования массива из 12 целых чисел, содержащего количества дней по месяцам невисокосного года, т.е. 31, 28, 31, 30 и т.д. Этот массив (назовем его SIZE_OF_MONTH - длина _месяца) можно использовать и для обратной задачи, т.е. для определения даты критических дней, а также для проверки правильности вводимых дат. Таким образом, массив SIZE__OF_MONTH будет использоваться сразу в трех процедурах. Сделаем его глобальным, для чего его описание поместим перед описанием процедур:




Начало  Назад  Вперед



Книжный магазин