Мегаобучалка Главная | О нас | Обратная связь


ОПИСАНИЕ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ



2019-07-04 191 Обсуждений (0)
ОПИСАНИЕ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ 0.00 из 5.00 0 оценок




 

Ввод исходных данных (даты рождения человека и текущей даты) осуществляется в формате ДД ММ ГГГГ с клавиатуры по запросу (тип переменных, соответствующих этим значениям, Integer).

Для реализации вывода на экран расчетных данных для дат пика и спада биоритмов – наиболее и наименее благоприятных дней использую тип Integer. Для вывода данных о продолжительности жизни в часах минутах и секундах использую Longint («длинный» целый), так как для типа Integer диапазон возможных значений данных от –32768 до +32767. Если учесть, что средняя продолжительность жизни человека около 70 лет, то есть 25550 дней, и соответственно 36792000 часов, то приемлем только тип данных Longint с диапазоном значений от –2147483648 до +2147483647. 

Программное и аппаратное обеспечение для нормальной работы программы стандартное – Turbo Pascal 7.0 – при отсутствии исполнимого файла. Операционная система MS-DOS 6.0 или Windows95 и выше с режимом эмуляции MS-DOS.

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

 

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

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

ЗАКЛЮЧЕНИЕ

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


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

 

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

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

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

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

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

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


ПРИЛОЖЕНИЕ 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);

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

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

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

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

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

     ДД-ММ-ГГГГ.}

     const

        Names_of_Monthes:array[1..12] of string[5]=

                         ('янв ','февр','март','апр ','май ',

                         'июнь','июль','авг ','сент','окт ',

                         'нояб','дек ');

        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}

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

      var

         longdays: longint; {"Длинная" целая переменная

                             для часов, минут и секунд}

      BEGIN {WriteDates}

        longdays:=days;

        writeln('Прошло: ',longdays,' дней, ',longdays*24,

        ' часов, ',longdays*24*60,' минут, ',

        longdays*24*360,' секунд.');

          WriteDate('Наименее благоприятный день: ',dmin);

          WriteDate('Наиболее благоприятный день: ',dmax);

      END; {WriteDates}

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

      BEGIN {ГЛАВНАЯ ПРОГРАММА}

    Writeln('______________________________');

        Writeln(' Программа расчета благоприятных дней ');

        Writeln(' Ввод данных осуществляйте через пробел ');

        Writeln('Окончание ввода данных подтвердите с помощью клавиши ENTER');        

InputDates(d0,m0,y0,d,m,y);

        Writeln('-----------------------------------------');

    Get_numbers_of_days(d0,m0,y0,d,m,y,days);

        FindMaxMin(dmin,dmax,days);

        WriteDates(dmin,dmax,days);

      END.

 



2019-07-04 191 Обсуждений (0)
ОПИСАНИЕ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ 0.00 из 5.00 0 оценок









Обсуждение в статье: ОПИСАНИЕ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (191)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)