Программирование на Pascal
Рефераты >> Программирование и компьютеры >> Программирование на Pascal

5. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

Ввод исходных данных осуществляется с клавиатуры по запросу программы.

Данные необходимо вводить строго придерживаясь указанного формата: ДД ММ ГГГГ – по два символа на день и месяц и четыре символа на ввод года, разделять значения дня, месяца и года необходимо пробелом. Окончание ввода строки данных подтвердить стандартно с помощью клавиши ENTER.

6. ЗАКЛЮЧЕНИЕ

Программа служит для определения дней максимума и минимума суммарных психо-физических параметров человеческого организма. Может быть использована в повседневной жизни для планирования наиболее важных для человека мероприятий, например: определения дней усиленных тренировок для занимающихся активным спортом, проведения интервью, публичных выступлений для политиков, заключения важных сделок и ведения переговоров для бизнесменов и так далее.

7. СПИСОК ЛИТЕРАТУРЫ

1. Абрамов В.Г., Трифонов Н.П. Введение в язык Паскаль. – М. :Наука, 1988.-320 с.

2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. – М.: Наука, 1987. – 112 с.

3. Бутомо И.Д., Самочадин А.В., Усанова Д.В. Программирование на алгоритмическом языке Паскаль. – Л.: Издательство Ленинградского университета, 1985. – 216 с.

4. Грэхем Р. Практический курс языка Паскаль. – М.: Радио и связь. 1986 – 200 с.

5. Йенсен К., Вирт Н. Руководство для пользователя и описание языка. – М., 1982. 151 с.

6. Пильщиков В.Н. Сборник упражнений по языку Паскаль. – М.: Наука, 1989. – 160 с.

8. ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ

Program bioritm;

{Программа для определения физической, эмоциональной и

интеллектуальной активности человека. Вводится дата рождения и

текущая дата.

Программа вычисляет и выводит на экран общее количество дней

часов, минут и секунд, разделяющих обе даты, а также прогнозирует

на месяц вперед даты, соответствующие максимуму и минимуму биоритмов}

CONST

SIZE_OF_MONTH: ARRAY [1 12] OF BYTE=

(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var

d0,d, {Дни рождения и месяцы}

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

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

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

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

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

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

PROCEDURE InputDates (var d0,m0,y0,d,m,y: integer);

{Ввод даты рождения и текущей даты.

Контроль правильности дат и их непротиворечивости

(текущая дата должна быть позже даты рождения)}

var

correctly: boolean; {Признак правильности ввода}

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

PROCEDURE InpDate (text: string;

var d,m,y: integer);

{Выводит приглашение TEXT, вводит дату в формате

ДД ММ ГГГГ и проверяет ее правильность}

const

YMIN=1900; {Минимальный правильный год}

YMAX=2100; {Максимальный правильный год}

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:=y>y0; {ПРоверить непротиворечивость дат:}

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}

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

PROCEDURE Get_numbers_of_days (d0,m0,y0,d,m,y: integer;

var days: integer);

{Определение полного количества дней,

прошедших от одной даты до другой}

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

PROCEDURE Variant2;

{Подсчет количества дней в месяцах, разделяющих обе даты}

var

mm: integer;

BEGIN {Variant2}

mm:=m0;

while mm<m do

begin

days:=days+Size_of_Month[mm];

if (mm=2) and (m0 mod 4=0) then inc(days);

inc(mm);

end;

END; {Variant2}

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

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 (y0 mod 4=0) then inc(days);

inc(mm);

end;

yy:=y0+1;

while yy<y 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;

{Даты отличаются не только днями: }

begin

days:=d+Size_of_Month[m0]-d0;

{Учесть количество дней в текущем месяце и

количество дней до конца месяца рождения}

if (y0 mod 4=0) and (m0=2) then inc(days);

{Учесть високосный год }

if y=y0 then Variant2;

{Разница в месяцах одного и того же года}

Variant3;

{Даты отличаются годами}

end;

END; {Get_numbers_of_days}

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

PROCEDURE FindMaxMin (var dmin,dmax: integer;

days: integer);

{Поиск критических дней }

const

TF=2*3.1416/23.6884; {Период физической активности}

TE=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;

if x<min then

begin

min:=x;

dmin:=days+i;

end;

end;

END; {FindMaxMin}

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

PROCEDURE WriteDates(dmin,dmax,days:integer);

{Опреджеление и вывод дат критических дней.

Вывод дополнительной информации о количестве

прожитых дней, часов, минут и секунд}

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

PROCEDURE WriteDate(text:string;

dd:integer);


Страница: