Автор работы: Пользователь скрыл имя, 11 Октября 2011 в 06:50, курсовая работа
Термин информационная система (ИС) используется как в широком, так и в узком смысле.
В широком смысле информационная система есть совокупность технического, программного и организационного обеспечения, а также персонала, предназначенная для того, чтобы своевременно обеспечивать надлежащих людей надлежащей информацией.
1. ВВЕДЕНИЕ 2
2. НАЗНАЧЕНИЕ РАБОТЫ И ОБЛАСТЬ ЕЕ ПРИМЕНЕНИЯ. ПОСТАНОВКА ЗАДАЧИ 3
3. ИСПОЛЬЗУЕМЫЕ МЕТОДЫ, ОПИСАНИЕ АЛГОРИТМА ПРОГРАММЫ С ОПИСАНИЕМ ФУНКЦИЙ СОСТАВНЫХ ЧАСТЕЙ И СВЯЗИ МЕЖДУ НИМИ 4
4. ОПИСАНИЕ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ 6
5. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 6
6. ЗАКЛЮЧЕНИЕ 6
7. СПИСОК ЛИТЕРАТУРЫ 8
8. ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ 9
9. ПРИЛОЖЕНИЕ 2. РЕЗУЛЬТАТЫ РАБОТЫ 16
В процедуре Findmaxmin осуществляется поиск критических дней, то есть ближайших к текущей дате дней, для которых все три биоритма достигают своего максимума и минимума. Принимаю, что биоритмы изменяются по синусоидальным зависимостям от количества прожитых дней с периодами TF, TE и TI соответственно для физической, эмоциональной и интеллектуальной активности человека, которые являются усредненными для мужчин и женщин. Периоды принимаю следующие (в днях):
Поиск критических дней определяется для текущего дня и для каждого из последующих дней до первого пика максимума или минимума в заранее определенном интервале – в данном случае 30 дней.
С
помощью процедуры WRITEDATES выводятся
на экран результаты работы программы.
Так как расчет проводится дважды – для
даты пика и даты спада биоритмов, то целесообразно
вынести его в отдельную процедуру WRITEDATE.
ОПИСАНИЕ
ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ
Ввод исходных данных (даты рождения человека и текущей даты) осуществляется в формате ДД ММ ГГГГ с клавиатуры по запросу (тип переменных, соответствующих этим значениям, Integer).
Для реализации вывода на экран расчетных данных для дат пика и спада биоритмов – наиболее и наименее благоприятных дней использую тип Integer. Для вывода данных о продолжительности жизни в часах минутах и секундах использую Longint («длинный» целый), так как для типа Integer диапазон возможных значений данных от –32768 до +32767. Если учесть, что средняя продолжительность жизни человека около 70 лет, то есть 25550 дней, и соответственно 36792000 часов, то приемлем только тип данных Longint с диапазоном значений от –2147483648 до +2147483647.
Программное и
аппаратное обеспечение для нормальной
работы программы стандартное –
Turbo Pascal 7.0 – при отсутствии исполнимого
файла. Операционная система MS-DOS 6.0 или
Windows95 и выше с режимом эмуляции MS-DOS.
ЛИСТИНГ ПРОГРАММЫ
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)
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;
{Поиск критических дней }
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)
min:=max;
dmin:=days;
dmax:=days;
for i:=0 to INTERVAL do
begin
x:=sin((days+i)*TF)+sin((days+
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:
{Опреджеление и вывод дат критических дней.
Вывод дополнительной
прожитых дней, часов, минут и секунд}
{-----------------------------
PROCEDURE WriteDate(text:string;
dd:integer);
{Определение даты для дня DD от монента рождения.
В глобальных переменных d,m и y имеется текущая дата,
в переменной DAYS - количество дней, прошедших от момента
рождения до текущей даты.
Выводится сообщение TEXT и найденная дата в формате