Сборник задач и упражнений по курсу "Моделирование" (Событийный подход. Программное моделирование), страница 8

После того как модельное время становится больше 6000 мин., результаты моделирования выводятся в файл в виде таблицы . Первый столбец таблицы - номера самолетов.

int main(void)

{

ofstream ofs("test10.txt");

int w=0;

while(w<10){

simulation(ofs);

w++;

}

B стеке функции int main(void) отводится память под объект ofs класса ofstream. Таким образом открывается для записи файл "test10.txt" и производится 10 запусков функции simulation. В результате в файле "test10.txt" записывается информация о результатах моделирования ( 10 тестовых таблиц ).

Полный текст программы

#include <fstream.h>

#include <math.h>

#include <stdlib.h>

#include <time.h>

void  normt(unsigned *xx);

void  normt(unsigned *xx)

{

int i,j;

double x[400];

double a,b,w;

int s=60,u=180;

float l;

randomize();

i=0;

while(i<400){

x[i]=random(21)/20.0;

i++;

}

randomize();

i=0;

j=0;

while(j<400){

a =2*x[j]-1;

b=2*(random(21)/20.0)-1;

w=a*a+b*b;

if (w>0&&w<=1){

l=-2.0*log(w)/w;

*(xx+i)=a*sqrt(l)*s+u;

*(xx+i+1)=b*sqrt(l)*s+u;

if(*(xx+i)<120&&*(xx+i)>60&&*(xx+i+1)<120&&*(xx+i+1)>60)

i+=2;

}

else if(w==0){

*(xx+i)=u;

*(xx+i+1)=u;i+=2; }

j++;

}

}

class Fifo_a {

unsigned char a,f[5];

void move (unsigned char i);

public:

Fifo_a(){a=5;f[0]=0;f[1]=1;f[2]=2;f[3]=3;f[4]=4;}

unsigned char get_a(void){return a;}

void write_f(unsigned char i)

{

f[a]=i;

a++;

}

unsigned char take_off_f(unsigned char i=0);

};

void Fifo_a::move(unsigned char i)

{while(i < a){f[i]=f[i+1];i++;}}

unsigned char Fifo_a::take_off_f(unsigned char i)

{

unsigned char j;

if(f[i]>2){

j=i;

while(j<a&&f[j]>2)

j++;

if(j<a)

i=j;

}

j=f[i];

move(i);

a--;

return j;

}

class  Aircraft {

unsigned int         begin_t,

nonuse_t,

min_t,

max_t;

unsigned char        f,

n,

n_cont,

cur_cont;

public:

Aircraft() {nonuse_t=0;f=0;min_t=max_t=0;n=0;n_cont=80;cur_cont=0;begin_t=0;}

unsigned char get_f(void){return f;}

unsigned char get_n(){return n;}

void write_f(unsigned char i){f=i;}

void write_140(){n_cont=140;}

void write_nt(unsigned t){nonuse_t+=t;}

unsigned get_b(void){return begin_t;}

void inc_n(void){if(n==0)max_t=min_t=nonuse_t;n++;}

unsigned get_max_t(){return max_t;}

unsigned get_min_t(){return min_t;}

unsigned get_nu(void){return nonuse_t;}

unsigned get_n_cont(void){return n_cont;}

unsigned get_cur_cont(void){return cur_cont;}

void inc_cur_cont(void){ cur_cont++;}

void cur_cont_into_z(void){cur_cont=0;}

void b_t(unsigned int t){begin_t=t;}

void dmaxmin(unsigned int t){ if(max_t<t) max_t=t;else if(min_t>t)min_t=t;}

};

class Gen {

unsigned int time,

cont,

max_cont_t,

min_cont_t,

par_c[6500],

g_cont,

g_cont_t,

nonuse_time;

void maxmincont(unsigned t)

{

if(max_cont_t<t)

max_cont_t=t;

else if(min_cont_t>t)

min_cont_t=t;

}

void gen_cont(void);

public:

Gen() {time=0;cont=0;g_cont=0;

min_cont_t=max_cont_t=0;

g_cont_t=0;nonuse_time=0;

par_c[0]=0;}

void take_off_cont(void);

unsigned get_cont(void){return cont;}

unsigned get_time(void){return time;}

unsigned get_max(void){return max_cont_t;}

unsigned get_min(void){return min_cont_t;}

unsigned get_nt(){return nonuse_time;}

unsigned get_g_cont(){return g_cont;}

unsigned get_g_cont_t(){return g_cont_t;}

void genarator(Fifo_a &fa,Aircraft *ac);

};

void Gen::gen_cont(void)

{time++;par_c[cont]=time;cont++;par_c[cont]=time;cont++;}

void Gen::genarator(Fifo_a &fa,Aircraft *ac)

{

unsigned char i=0;

gen_cont();

while(i<5){

if(time==ac[i].get_b()&&ac[i].get_f()==1){

fa.write_f(i);

ac[i].write_f(0);

}

i++;

}

}

void Gen::take_off_cont(void)

{

unsigned i=0;

nonuse_time+=time-par_c[0];

if(g_cont==0)max_cont_t=min_cont_t=nonuse_time;

g_cont++;

g_cont_t=time;

maxmincont(time-par_c[0]);