Биоритмы
В процедуре FINDMAXMIN осуществляется поиск критических дней, т.е. ближайших к текущей дате дней, для которых все три биоритма достигают своего максимума и минимума. Предполагается, что биоритмы изменяются по законам синуса от количества прожитых дней с периодами ТF, ТE и TI соответственно для физической, эмоциональной и интеллектуальной активности человека. В программе приняты следующие периоды (в днях):
TF= 23.6884 ТЕ= 28.4261 TI= 33.1638
Самый простой алгоритм поиска заключается в том, чтобы вычислить значения сумм всех трех синусоид для текущего дня и для каждого из последующих дней на некотором заранее обусловленном интервале, например, в пределах месяца. Сопоставив результаты расчетов для каждого дня, нетрудно определить критические дни:
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}
При разработке алгоритма процедуры WRITEDATES, с помощью которой на экран выводится результат работы программы, учтем, что основные сложности будут связаны с определением новой даты по начальной дате и количеству прошедших дней. Этот насчет будет повторяться дважды – для даты пика и даты спада биоритмов, поэтому его следует вынести в отдельную процедуру WRITEDATES. Кроме того, вряд ли Вы откажетесь от возможности вывода на экран дополнительной информации о том, сколько полных дней, часов, минут и секунд разделяют дату рождения человека и текущую дату. Однако реализация этого вывода не столь проста, как это может показаться на первый взгляд.