Список использованных источников
⇐ ПредыдущаяСтр 2 из 2
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 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|