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

serve++;

}

}

stand=0; // Пока в очереди никто не стоит

i=1; // Начинаем с первой кассы

do

{

if( tau[i]>0 ) // Если время обсл-я не равно нулю, значит

stand++; // у кассы кто-то стоит

i++; // Смотрим у следующей кассы

}while( i<=m );

serve-=stand; // Корректируем кол-во обслуженных

t_free_av=(float)t_free/m; // Вычислим ср. время

простоя

serve_av=(float)serve/enter; // Вычислим ср. % обслуженных

refuse_av=(float)refuse/enter; // Вычислим ср. % необслуженных

textcolor(1); // Установка параметров текста

textbackground(2);

clrscr();

_setcursortype( _NOCURSOR );

/*Вывод полученных результатов

//Вывод рамки

printf("\n████████████████████████████████████████████████████████████████████████████████");

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

printf("█ █");

printf("████████████████████████████████████████████████████████████████████████████████");

gotoxy(3,3);

printf( "\n█\n█\t╔════════════════════════════════════════════════════════════╗ ");

printf(" \n█\t║ %d железнодорожных касс работало на протяжении: %d часов.",m,hours );

gotoxy(70,6);

printf("║");

printf(" \n█\t║ В зал зашло %d посетителей.", enter );

gotoxy(70,7);

printf("║");

printf(" \n█\t║");

gotoxy(70,8);

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)) ); // Расчет нач. знач-я пар-ра а

Страница:  1  2  3  4  5 


Другие рефераты на тему «Экономико-математическое моделирование»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы