Определение биоритмов
{---------------} Procedure Variant3; {Подсчет количества дней в месяцах и годах, разделяющих обе даты} var mm, yy: Integer; begin {variant3} mm: = m0 + 1; while mm <= 12 do {Учитываем остаток года рождения:} begin days: = days+Size_of_Month[mm]; if (mm = 2) and (yO mod 4=0) then inc (days); inc (mm) end; yy: = y0 + 1; while yy < у do {Прибавляем разницу лет:} begin days: = days + 365; if yy mod 4=0 then inc (days); inc (yy) end; mm: = 1; while mm < m do {Прибавляем начало текущего года:} begin days: = days + Size_of_Month[mm]; if (y mod 4=0) and (mm = 2) then inc (days); inc (mm) end end; {Variant3} {--------------------} begin {Get_numbers_of_days} if (y = y0) and (m = m0) then {Даты отличаются только днями:} days: = d – d0 else {Даты отличаются не только днями: } begin days: = d + Size_of_Month[m0] -d0; {Учитываем количество дней в текущем месяце и количество дней до конца месяца рождения} if (y0 mod 4=0) and (m0 = 2) then inc (days); {Учитываем високосный год} if у = y0 then Variant2 {Разница в месяцах одного и того же года} else Variant3 {Даты отличаются годами} end end; {Get_numbers_of_days} {-------------------} Procedure FindMaxMin(var dmin, dmax: Integer; days: Integer); {Поиск критических дней} const TF = 2*3.1416/23.6884; {Период физической активности} ТЕ = 2*3.1416/28.4261; {Период эмоциональной активности} TI = 2*3.1416/33.1638; {Период интеллектуальной активности} INTERVAL = 30; {Интервал прогноза} var min, {Накапливает минимум биоритмов} max, {Накапливает максимум биоритмов} x: Real; {Текущее значение биоритмов} i: Integer; begin {FindMaxMin} max: = sin(days*TF)+sin(days*TE)+sin(days*TI); min: = max; {Начальное значение минимума и максимума равно значению биоритмов для текущего дня} dmin: = days; dmax: = days; for i: = 0 to INTERVAL do begin x: = sin((days+i)*TF) + sin((days+i)*TE) + sin((days+i)*TI); if x > max then begin max: = x; dmax: = days + i end else if x < min then begin min: = x; dmin: = days + i end end; end; {FindMaxMin}