ИС портфельного и процентного рисков

Автор работы: Пользователь скрыл имя, 11 Октября 2011 в 06:50, курсовая работа

Краткое описание

Термин информационная система (ИС) используется как в широком, так и в узком смысле.

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

Содержание работы

1. ВВЕДЕНИЕ 2
2. НАЗНАЧЕНИЕ РАБОТЫ И ОБЛАСТЬ ЕЕ ПРИМЕНЕНИЯ. ПОСТАНОВКА ЗАДАЧИ 3
3. ИСПОЛЬЗУЕМЫЕ МЕТОДЫ, ОПИСАНИЕ АЛГОРИТМА ПРОГРАММЫ С ОПИСАНИЕМ ФУНКЦИЙ СОСТАВНЫХ ЧАСТЕЙ И СВЯЗИ МЕЖДУ НИМИ 4
4. ОПИСАНИЕ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ 6
5. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 6
6. ЗАКЛЮЧЕНИЕ 6
7. СПИСОК ЛИТЕРАТУРЫ 8
8. ПРИЛОЖЕНИЕ 1. ЛИСТИНГ ПРОГРАММЫ 9
9. ПРИЛОЖЕНИЕ 2. РЕЗУЛЬТАТЫ РАБОТЫ 16

Содержимое работы - 1 файл

ИС портфельного и процентного рисков.doc

— 147.50 Кб (Скачать файл)

      В процедуре Findmaxmin осуществляется поиск критических дней, то есть ближайших к текущей дате дней, для которых все три биоритма достигают своего максимума и минимума. Принимаю, что биоритмы изменяются по синусоидальным зависимостям от количества прожитых дней с периодами TF, TE и TI соответственно для физической, эмоциональной и интеллектуальной активности человека, которые являются усредненными для мужчин и женщин. Периоды принимаю следующие (в днях):

    • TF=23.6884 – период физической  активности
    • TE=28.4261 – период эмоциональной активности
    • TI=33.1638 – период интеллектуальной активности

      Поиск критических дней определяется для  текущего дня и для каждого  из последующих дней до первого пика максимума или минимума в заранее  определенном интервале – в данном случае 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)

                                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);

          {Определение даты для дня DD от монента рождения.

          В глобальных переменных d,m и y имеется текущая дата,

          в переменной DAYS - количество дней, прошедших от момента

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

          Выводится сообщение TEXT и найденная дата в формате

Информация о работе ИС портфельного и процентного рисков