Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Список использованных источников




 

1. Лифшиц А.Л. Статистическое моделирование СМО, М., 1978.

2. Советов Б.А., Яковлев С.А. Моделирование систем, М: Высшая школа, 1985.

3. Гмурман В.Е. Теория вероятностей и математическая статистика, М: Высшая школа, 2001.

4. Пригодин Н.В. Системный подход в моделироании М., 1986.


Приложение

Листинг программы

 

void CSMODlg:: OnButton1 ()

{

UpdateData ();

if (! NTime)

{

timeS=m_StartH*60+m_StartM;

timeE=m_EndH*60+m_EndM;

timeT=timeS+timeE;

int i=timeS;

Tm=timeS;

m_Table2. SetCols (m_CountOch*4);

m_Table2. SetRows (1);

m_Table2. SetRows (4);

int j=0;

while (j< (m_CountOch*4))

{

m_Table2. SetTextMatrix (0,j,"№"); m_Table2. SetColWidth (j,350);

m_Table2. SetTextMatrix (0,j+1,"Получение"); m_Table2. SetColWidth (j+1,700);

m_Table2. SetTextMatrix (0,j+2,"Обслужен"); m_Table2. SetColWidth (j+2,700);

m_Table2. SetTextMatrix (0,j+3,"Состояние"); m_Table2. SetColWidth (j+3,800);

j+=4;

}

for (i=0; i<1000; i++)

{

OCH. o1 [i] =0; OCH. o2 [i] =0;

OCH. kol1 [i] =0; OCH. kol2 [i] =0;

OCH. Obsluzh1 [i] =1;

OCH. Vib1 [i] =1;

OCH. TP [i] =0; OCH. TW [i] =0;

stat1 [i] =0;

stat2 [i] =0;

for (int k=0; k<1000; k++)

{

Kli [i]. num1 [k] =0; Kli [i]. time1 [k] =0; Kli [i]. timeVib [k] =0;

Kli2 [i]. num1 [k] =0; Kli2 [i]. time1 [k] =0; Kli2 [i]. timeVib [k] =0;

}

}

OCH. io1=0; OCH. io2=0;

Klient=0; Klient2=0;

bol=0;

}

LTimer1=SetTimer (ID_TIMER1,100,NULL);

UpdateData (FALSE);

}

void CSMODlg:: OnTimer (UINT uTime)

{

int i,n,tp;

float hr,min,sek;

char a [255];

time_t t;

srand ((unsigned) time (&t));

COleSafeArray saRet;

DWORD numElements [] = {m_CountOch, 2};

saRet. Create (VT_R8, 2, numElements);

if (Klient2<=0 && bol! =0)

{ // очередь с первым приоритетом

i=0;

tp= (atof (m_Table. GetTextMatrix (1,3)) - atof (m_Table. GetTextMatrix (1,2))) *100;

Klient2= (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (1,2));

++OCH. kol1 [i]; // общее количество для аппарата

++OCH. o2 [i]; // количество с данным приоритетом

if (m_Table2. GetRows () < (OCH. kol1 [i] +3))

{

m_Table2. SetRows (m_Table2. GetRows () +1); iTabl++;

}

tp= (atof (m_Table. GetTextMatrix (1,5)) - atof (m_Table. GetTextMatrix (1,4))) *100;

Kli2 [i]. time1 [OCH. o2 [i]] =Tm+ (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (1,4));

float prim=Kli2 [i]. time1 [OCH. o2 [i]];

Kli2 [i]. timeVib [OCH. o2 [i]] =Tm+rand ()% (m_Vibiv-m_DoVib) +m_DoVib;

Kli2 [i]. num1 [OCH. o2 [i]] =OCH. kol1 [i];

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

hr=floorf (Tm/60);

min=floorf (Tm-hr*60);

sek=floorf ((Tm*100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);

m_Table2. SetTextMatrix (OCH. kol1 [i],1+i*4,a);

itoa (OCH. kol1 [i],a,10);

m_Table2. SetTextMatrix (OCH. kol1 [i], i*4,a);

if (stat1 [i] ==0&&stat2 [i] ==0)

{

m_Table2. SetTextMatrix (OCH. kol1 [i],3+i*4,"Выполняется");

OCH. CountObsl [i] =2;

Kli2 [i]. Stat [OCH. o2 [i]] =2;

stat2 [i] =1;

}

else

{

m_Table2. SetTextMatrix (OCH. kol1 [i],3+i*4,"Ожидает");

Kli2 [i]. Stat [OCH. o2 [i]] =1;

}

}

Klient2--;

bol=1;

if (Klient<=0)

{

 // очередь со вторым приоритетом

int k;

if (bol==0)

i=rand ()%m_CountOch;

if (m_CountOch==1)

{i=0; }

else

{i=m_CountOch;

for (k= (m_CountOch-1); k>=0; k--)

{

if ((OCH. kol1 [k] -OCH. Obsluzh1 [k]) <= (OCH. kol1 [i] -OCH. Obsluzh1 [i]))

i=k;

else i=i;

}if (i==m_CountOch) i=i-1;

}

++OCH. kol1 [i]; // общее количество

++OCH. o1 [i]; // количество с данным приоритетом

if (m_Table2. GetRows () < (OCH. kol1 [i] +3))

{

m_Table2. SetRows (m_Table2. GetRows () +1);

}

if ((Tm>=480) && (Tm<720))

{

tp= (atof (m_Table. GetTextMatrix (2,3)) - atof (m_Table. GetTextMatrix (2,2))) *100;

Klient= (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (2,2));

tp= (atof (m_Table. GetTextMatrix (2,5)) - atof (m_Table. GetTextMatrix (2,4))) *100;

Kli [i]. time1 [OCH. o1 [i]] =Tm+ (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (2,4));

Kli [i]. timeVib [OCH. o1 [i]] =Tm+rand ()% (m_Vibiv-m_DoVib) +m_DoVib;

}else

if ((Tm>=720) && (Tm<900))

{

tp= (atof (m_Table. GetTextMatrix (3,3)) - atof (m_Table. GetTextMatrix (3,2))) *100;

Klient= (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (3,2));

tp= (atof (m_Table. GetTextMatrix (3,5)) - atof (m_Table. GetTextMatrix (3,4))) *100;

Kli [i]. time1 [OCH. o1 [i]] =Tm+ (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (3,4));

Kli [i]. timeVib [OCH. o1 [i]] =Tm+rand ()% (m_Vibiv-m_DoVib) +m_DoVib;

}else

if ((Tm>=900) && (Tm<1200))

{

tp= (atof (m_Table. GetTextMatrix (4,3)) - atof (m_Table. GetTextMatrix (4,2))) *100;

Klient= (rand ()%tp) *0.01+atof (m_Table. GetTextMatrix (4,2));

tp= (atof (m_Table. GetTextMatrix (4,5)) - atof (m_Table. GetTextMatrix (4,4))) *100;

Kli [i]. time1 [OCH. o1 [i]] =Tm+ (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (4,4));

Kli [i]. timeVib [OCH. o1 [i]] =Tm+rand ()% (m_Vibiv-m_DoVib) +m_DoVib;

}

Kli [i]. num1 [OCH. o1 [i]] =OCH. kol1 [i];

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

hr=floorf (Tm/60);

min=floorf (Tm-hr*60);

sek=floorf ((Tm*100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);

m_Table2. SetTextMatrix (OCH. kol1 [i],1+i*4,a);

itoa (OCH. kol1 [i],a,10);

m_Table2. SetTextMatrix (OCH. kol1 [i], i*4,a);

if (stat1 [i] ==0&&stat2 [i] ==0)

{

m_Table2. SetTextMatrix (OCH. kol1 [i],3+i*4,"Выполняется");

OCH. CountObsl [i] =1;

Kli [i]. Stat [OCH. o1 [i]] =2;

stat1 [i] =1;

}

else

{

m_Table2. SetTextMatrix (OCH. kol1 [i],3+i*4,"Ожидает");

Kli [i]. Stat [OCH. o1 [i]] =1;

}

}

Klient--;

 // // // // // // // // выбывание из очереди // // // // // // // // // // // // // // //

int count;

for (int ki=0; ki<m_CountOch; ki++)

{

for (int j=1; j< (OCH. o1 [ki] +1); j++)

{

count=Kli [ki]. num1 [j];

if (strcmp (m_Table2. GetTextMatrix (count,3+ki*4),"Выполняется") ==0)

{

 // // // // // /

OCH. TW [ki] ++;

if ((Kli [ki]. time1 [count] <=Tm) && (Kli [ki]. time1 [count]! =0))

{

m_Table2. SetTextMatrix (count,3+ki*4,"Обслужен");

OCH. Obsluzh1 [ki] ++;

hr=Kli [ki]. time1 [count] /60;

hr=floorf (hr);

min=floorf ((Kli [ki]. time1 [count])) - hr*60;

sek=floorf (((Kli [ki]. time1 [count]) *100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);

m_Table2. SetTextMatrix (count,2+ki*4,a);

stat1 [ki] =0; break;

}else stat1 [ki] =1;

 // // // // // /

}

}

for (j=1; j< (OCH. o2 [ki] +1); j++)

{

count=Kli2 [ki]. num1 [j];

if (strcmp (m_Table2. GetTextMatrix (count,3+ki*4),"Выполняется") ==0)

{

OCH. TW [ki] ++;

if ((Kli2 [ki]. time1 [count] <=Tm) && (Kli2 [ki]. time1 [count]! =0))

{

m_Table2. SetTextMatrix (count,3+ki*4,"Обслужен");

OCH. Obsluzh1 [ki] ++;

hr= (Kli2 [ki]. time1 [count]) /60;

hr=floorf (hr);

min=floorf ((Kli2 [ki]. time1 [count]) - hr*60);

sek=floorf (((Kli2 [ki]. time1 [count]) *100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);

m_Table2. SetTextMatrix (count,2+ki*4,a);

stat2 [ki] =0; break;

}else stat2 [ki] =1;

}

}

}

 // // // // // // // // // // // // // // // // // // // // // // // // // // // // /

for (ki=0; ki<m_CountOch; ki++)

{

for (int j=1; j< (OCH. o1 [ki] +1); j++)

{

if (strcmp (m_Table2. GetTextMatrix (Kli [ki]. num1 [j],3+ki*4),"Ожидает") ==0)

{

if (stat1 [ki] ==0&&stat2 [ki] ==0)

{

stat1 [ki] =1;

m_Table2. SetTextMatrix (Kli [ki]. num1 [j],3+ki*4,"Выполняется");

goto l1;

}

if (Kli [ki]. timeVib [j] <=Tm)

{

m_Table2. SetTextMatrix (Kli [ki]. num1 [j],3+ki*4,"Выбыл");

Kli [ki]. time1 [Kli [ki]. num1 [j]] =0;

OCH. Vib1 [ki] ++;

hr=Tm/60;

hr=floorf (hr);

min=floorf (Tm-hr*60);

sek=floorf ((Tm*100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);

m_Table2. SetTextMatrix (Kli [ki]. num1 [j],2+ki*4,a);

}

l1:; }

}

for (j=1; j< (OCH. o2 [ki] +1); j++)

{

if (strcmp (m_Table2. GetTextMatrix (Kli2 [ki]. num1 [j],3+ki*4),"Ожидает") ==0)

{

if (stat1 [ki] ==0&&stat2 [ki] ==0)

{

stat2 [ki] =1;

m_Table2. SetTextMatrix (Kli2 [ki]. num1 [j],3+ki*4,"Выполняется");

goto l2;

}

if (Kli2 [ki]. timeVib [j] <=Tm)

{

m_Table2. SetTextMatrix (Kli2 [ki]. num1 [j],3+ki*4,"Выбыл");

Kli2 [ki]. time1 [Kli2 [ki]. num1 [j]] =0;

OCH. Vib1 [ki] ++;

hr=Tm/60;

hr=floorf (hr);

min=floorf (Tm-hr*60);

sek=floorf ((Tm*100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);

m_Table2. SetTextMatrix (Kli2 [ki]. num1 [j],2+ki*4,a);

}

l2:; }

}

}

long index [2];

for (index [0] =0; index [0] <m_CountOch; index [0] ++)

{

for (index [1] =0; index [1] <2; index [1] ++)

{

double val = OCH. Obsluzh1 [index [0]] -1;

saRet. PutElement (index, &val);

}

}

m_mychart. SetChartData (saRet. Detach ());

m_mychart. Refresh;

 // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /

Tm++;

if (Tm>=timeT)

{

KillTimer (ID_TIMER1);

n=m_Table2. GetRows ();

m_Table2. SetRows (n+5);

for (int j=0; j<m_CountOch; j++)

{

m_Table2. SetTextMatrix (n+2,2+j*4,"вр. работы");

hr=floorf (OCH. TW [j] /60);

min=floorf (OCH. TW [j] -hr*60);

sek=floorf ((OCH. TW [j] *100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);

m_Table2. SetTextMatrix (n+2,3+j*4,a);

OCH. TP [j] =timeE-OCH. TW [j];

m_Table2. SetTextMatrix (n+3,2+j*4,"вр. простоя");

hr=floorf (OCH. TP [j] /60);

min=floorf (OCH. TP [j] -hr*60);

sek=floorf ((OCH. TP [j] *100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);

m_Table2. SetTextMatrix (n+3,3+j*4,a);

}

strcpy (str,"Общее время работы \t\t");

hr=floorf (timeE/60);

min=floorf (timeE-hr*60);

sek=floorf ((timeE*100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f\r\n",hr,min,sek);

strcat (str,a);

strcat (str,"Номер аппарата обслуживания \t");

for (j=0; j<m_CountOch; j++) {sprintf (a,"%d\t",j+1); strcat (str,a); }

strcat (str,"\r\n");

strcat (str,"Время работы аппарата\t\t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%s\t",m_Table2. GetTextMatrix (n+2,3+4*j)); strcat (str,a); }

strcat (str,"\r\n");

strcat (str,"Время простоя аппарата\t\t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%s\t",m_Table2. GetTextMatrix (n+3,3+4*j)); strcat (str,a); }

strcat (str,"\r\n");

strcat (str,"Общее количество клиентов \t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d\t",OCH. kol1 [j]); strcat (str,a); }

strcat (str,"\r\n");

strcat (str,"Количество обслуженных клиентов\t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d\t",OCH. Obsluzh1 [j] -1); strcat (str,a); }

strcat (str,"\r\n");

strcat (str,"Количество выбывших клиентов\t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d\t",OCH. Vib1 [j] -1); strcat (str,a); }

LPTSTR sizeF;

LPTSTR *sizeOf;

CStdioFile File ("отчёт. txt",CFile:: modeCreate|CFile:: modeWrite|CFile:: typeBinary);

File. WriteString ((LPCTSTR) str);

ShellExecute (NULL,NULL,"отчёт. txt",NULL, NULL, SW_SHOWNORMAL);

NTime=FALSE;

}

}

void CSMODlg:: OnButton2 ()

{

KillTimer (ID_TIMER1);

NTime=TRUE;

}

void CSMODlg:: OnButton3 ()

{

char a [255];

float hr,min,sek;

strcpy (str,"Общее время работы \t\t");

hr=floorf (timeE/60);

min=floorf (timeE-hr*60);

sek=floorf ((timeE*100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f\r\n",hr,min,sek);

strcat (str,a);

strcat (str,"Номер аппарата обслуживания \t");

for (int j=0; j<m_CountOch; j++) {sprintf (a,"%d\t\t",j+1); strcat (str,a); }

strcat (str,"\r\n");

strcat (str,"Время работы аппарата\t\t");

for (j=0; j<m_CountOch; j++)

{

hr=floorf (OCH. TW [j] /60);

min=floorf (OCH. TW [j] -hr*60);

sek=floorf ((OCH. TW [j] *100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f\t\t",hr,min,sek);

strcat (str,a);

}

strcat (str,"\r\n");

strcat (str,"Время простоя аппарата\t\t");

for (j=0; j<m_CountOch; j++)

{

OCH. TP [j] =timeE-OCH. TW [j];

hr=floorf (OCH. TP [j] /60);

min=floorf (OCH. TP [j] -hr*60);

sek=floorf ((OCH. TP [j] *100- (hr*60+min) *100) /60);

sprintf (a,"%2.0f:%2.0f:%2.0f\t\t",hr,min,sek);

strcat (str,a);

}

strcat (str,"\r\n");

strcat (str,"Общее количество клиентов \t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d\t\t",OCH. kol1 [j]); strcat (str,a); }

strcat (str,"\r\n");

strcat (str,"Количество обслуженных клиентов\t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d\t\t",OCH. Obsluzh1 [j] -1); strcat (str,a); }

strcat (str,"\r\n");

strcat (str,"Количество выбывших клиентов\t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d\t\t",OCH. Vib1 [j] -1); strcat (str,a); }

COtchDlg m_Otch;

UpdateData ();

m_Otch. m_Show=str;

UpdateData (FALSE);

KillTimer (ID_TIMER1);

NTime=FALSE;

}

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...