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

Биоритмы

Дело в том, что диапазон возможных значений данных типа INTEGER составляет от -32768 до +32767. Средняя продолжительность жизни человека – около 70 лет, т.е. 25550 дней. Это значение еще можно представить в Переменной типа INTEGER, однако часы, минуты и тем более секунды средней продолжительности жизни далеко превышают этот диапазон. Чтобы получить вывод достоверных данных, необходимо расширить диапазон значений целых чисел. Для этого в Турбо Паскале предусмотрен специальный тип данных LONGINT ("длинный" целый), имеющий диапазон значений от -2147483648 до +2147483647 (см. гл. 4).

Поэтому в процедуре WRITEDATES следует предусмотреть вспомогательную переменную этого типа, присвоить ей значение переменной DAYS и уже затем использовать "длинную" переменную для вычисления (и вывода) часов, минут, секунд. В результате начальный вариант процедуры WRITEDATES может быть таким:

Procedure WriteDates (dmin,dmax,days: Integer);
{Определение и вывод дат критических дней. Вывод дополнительной информации
о количестве прожитых дней, часов, минут и секунд }
{---------------------}
Procedure WriteDate (text: String; dd: Integer);
{Определение даты для дня DD от момента рождения.
В глобальных переменных d, m и у имеется текущая дата,
в переменной DAYS – количество дней, прошедших от момента рождения
до текущей даты.Выводится сообщение TEXT и найденная дата в формате ДД-МЕС-ГГГГ}
begin {WriteDate}
end; {WriteDate}
{---------------------}
var
LongDays: Longlnt; {"Длинная" целая переменная для часов,минут и секунд }
begin {Wri teDates}
LongDays: = days;
WriteLn('Прошло: ', LongDays,' дней, ', longDays*24, ' часов, ',
 LongDays*24*60, ' минут, ', LongDays*24*60*60, ' секунд');
WriteDate ('Наименее благоприятный день: ', drain);
WriteDate ('Наиболее благоприятный день: ',dmax)
end; {WriteDates}

Реализация процедуры WRITEDATE не вызывает особых сложностей:

Procedure WriteDate (text: String; dd: Integer);
const
Names_of_Monthes: array [1..12] of String [3] =
('янв','фев','мар','апр','мая', 'июн','июл','авг','сен','окт', 'ноя','дек');
var
d0,m0,y0,ddd: Integer;
begin {WriteDate}
d0: = d;
m0: = m;
y0: = y;
ddd: = days;
while ddd<>dd do begin
inc(d0); {Наращиваем число}
if (y0 mod 4 <> 0) and (d0 > Size_of_Month[m0]) or (y0 mod,4=0) and (d0=30) then
begin {Корректируем месяц}
d0: = 1;
inc(m0);
if m0 = 13 then {Корректируем год}
begin
m0: = 1;
inc(y0)
end
end;
inc(ddd)
end;
WriteLn(text,d0,'-',Names_of_Monthes[m0],'-',y0)
end; {WriteDate }

Собрав воедино отдельные части, получим полный текст программы (прил.5.2), предназначенной для определения биоритмов.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.