Xreferat.com » Рефераты по экономико-математическому моделированию » Имитационное моделирование на основании предварительно установленных зависимостей

Имитационное моделирование на основании предварительно установленных зависимостей

printf("║");

         printf("  n█t║n█t║ Было обслужено                         %d человек(а).", serve);

         gotoxy(70,9);

         printf("║");

         printf("  n█n█t║ Ушли необслуженными                     %d человек(а).", refuse);

         gotoxy(70,10);

         printf("║");

         printf("  n█n█t║ В очереди осталось стоять %d человек(а).      ", stand);

         gotoxy(70,11);

         printf("║");

         printf("  n█n█t║ Средний процент обслуживания пассажиров   %.2f%%", serve_av*100);

         gotoxy(70,12);

         printf("║");

         printf("  n█n█t║ Средний процент отказов в обслуживании    %.2f%%", refuse_av*100);

         gotoxy(70,13);

         printf("║");

         printf("  n█n█t║ Всего кассы простаивали:                 %.0fч. %.0f мин. ",floor( t_free/60 ),

         t_free-floor( t_free/60 )*60 );

         gotoxy(70,14);

         printf("║");

         printf("  n█n█t║ Среднее время простоя 1 кассы:           %.0fч. %.0f мин.",

         floor( t_free_av/60 ), t_free_av-floor( t_free_av/60 )*60);

         gotoxy(70,15);

         printf("║");

         gotoxy(70,16);

         printf("║");

         printf("  n█t╚════════════════════════════════════════════════════════════╝ ");

         getch();

  }

                                               //Функция возвращающая СЧ в диапазоне от 0 до 1

float RND_DIG (void)

  {

         float

                   x;                                                   //СЧ в диапазоне от 0 до 1

         N=(NI*N0);

         ND=floor(N/100);

         ND=(ND/10000-floor(ND/10000))*10000;         // Отбросим первые 2 цифры

         N0=NI;

         NI=ND;

         x=ND/9999;

         return x;

  }

          //Ф-я выделяет память под массив времени обсл-я у каждой из касс

void massive( void )

  {

         int i;

         tau=(float *)malloc( (m+1)*sizeof(float) );

                                               /* Обнуление элементов массива */

         for(i=1; i<=m; i++)

                   tau[i]=0;

  }

                   // Ф-я возвр. время обсл-я у кассы

float _tau( void )

  {

         float

                   x,                                             // Случайное число x

                   y,                                             // Случайное число y

                   z,                                             // Случайное число z

                   tau_;                                         // Время обслуживания

                                                                  // Проверка на четность

                                                                  //---------------------

         if( floor ( ( float )i/2 )==ceil( ( float )i/2 ) )

          {

                   x=RND_DIG();                           // Запрос случ. числа от ДСЧ

                   y=RND_DIG();                           // Запрос случ. числа от ДСЧ

                   if( x>=.0001)             // Если х не слишком маленькое, считаем z

                            z=sqrt( -2*log( x ) )*sin( 2*M_PI*y );

                   else

                    {

                            if( sin( 2*M_PI*y )<=0 )

                                      z=0;             // Если оба множителя слишком малы, то z=0

                            else

                                      z=(float)minutes/2;       //Если 2-й множ-ль нормальный, то

                    }                    //вел-на z равна половине времени работы зала.

                   tau_=MO+z*SKO;    // Вычислим нормально распределенное время обсл-я

                   if( tau_<0 )            // Если время отрицательно, оно равно 1 мин.

                            tau_=1;

          }

         else

          {

                   x=RND_DIG();                        // Запрос случ. величины от ДСЧ

                                      /* Вычислим равномерно распределенное время обсл-я */

                                      //--------------------------------------------------

                   tau_=floor( tau_min+x*( tau_max-tau_min )+.5);

          }

                   return floor( tau_+.5 );                  //Выведем в место запроса

 }

                   //       Ф-я определяет время входа след-го клиента. Промежутки

                   //       между входами распределены по закону Пуассона с пар-м lambda

                   //  ============================================================

 float time_to( void )

  {

         int

           j;                                   // Пар-р закона распр-я Пуассона

         float

                   x,                                                  // Случ. вел-на

                   tau,                                              // Время до входа

                   a,                                          // Пар-р закона распр-я

                   n,                                // Половина общего времени работы

                   S;                                          // Пар-р закона распр-я

         n=floor( minutes/2+0.5 );

         x=RND_DIG();                                      // Примем случ. число

         tau=0;

         j=0;

         a=exp( (lambda * (-1)) );                // Расчет нач. знач-я пар-ра а

         S=0;

         do

          {

                   if( S>=x && x<S+a ) // Проверка х на пренадл-ть промежутку [S ; S+a)

                            break;

                   tau++;

                   j++;

                   S+=a;

                   a*=lambda/j;

          }

         while( tau<=n );

         return current_time+tau;    // Возвратим время до входа след-го клиента

 }

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту
Нужна помощь в написании работы?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Пишем статьи РИНЦ, ВАК, Scopus. Помогаем в публикации. Правки вносим бесплатно.

Похожие рефераты: