fork download
  1. const
  2. lambda=200;
  3. mu=34.2;
  4. eta=0.8095;
  5. time_t=1000000;
  6. n_kanalov=4;
  7. l=3;
  8. var
  9. n_svob,p:integer;
  10. vypolneno:real;
  11. kolvo,otkaz:longint;
  12. i,ok:integer;
  13. t:longint;
  14. t_z0,t_z,t_obs:real;
  15. n:array[1..n_kanalov] of real;
  16. t_zan:array[1..n_kanalov] of real;
  17.  
  18. n_vyp:array[1..n_kanalov] of integer;
  19. n_l_z:array[1..n_kanalov] of integer;
  20. Pobs,Pzk:real;
  21. tpk:real;
  22. n_zero:array[1..l] of integer;
  23. begin
  24. randomize;
  25. t_z0:=0;
  26. kolvo:=0;
  27. otkaz:=0;
  28. vypolneno:=0;
  29. for i:=0 to n_kanalov do
  30. begin
  31. n_vyp[i]:=0;
  32. t_zan[i]:=0;
  33. end;
  34. for t:=0 to time_t do
  35. begin
  36. for i:=1 to n_kanalov do
  37. begin
  38. if ((t>=n[i])AND(n[i]<>0)) then
  39. begin
  40. n[i]:=0;
  41. vypolneno:=vypolneno+1/n_l_z[i];
  42. n_l_z[i]:=0;
  43. end;
  44. end;
  45. if (t>=t_z0) then
  46. begin
  47. t_z:=-100/lambda*ln((random(1000)+1)/1000);
  48. t_z0:=t_z0+t_z;
  49. inc(kolvo);
  50. n_svob:=0;
  51. for i:=1 to l do n_zero[i]:=0;
  52. p:=1;
  53. for i:=1 to n_kanalov do
  54. begin
  55. if (n[i]=0) then
  56. begin
  57. inc(n_svob);
  58. n_zero[p]:=i;
  59. inc(p);
  60. end;
  61. end;
  62. if (n_svob>=l) then begin
  63.  
  64. t_obs:=-100/(l*mu+eta)*ln((random(1000)+1)/1000);
  65. for i:=1 to l do
  66. begin
  67. n[n_zero[i]]:=t+t_obs;
  68. n_l_z[n_zero[i]]:=l;
  69. t_zan[n_zero[i]]:=t_zan[n_zero[i]]+t_obs;
  70. n_vyp[n_zero[i]]:=n_vyp[n_zero[i]]+1;
  71. ok:=1;
  72. end;
  73. end
  74. else
  75. if (n_svob>0)AND(n_svob<l) then begin
  76.  
  77. t_obs:=-100/(n_svob*mu+eta)*ln((random(1000)+1)/1000);
  78.  
  79. for i:=1 to n_svob do
  80.  
  81. begin
  82. n[n_zero[i]]:=t+t_obs;
  83. n_l_z[n_zero[i]]:=n_svob;
  84. t_zan[n_zero[i]]:=t_zan[n_zero[i]]+t_obs; n_vyp[n_zero[i]]:=n_vyp[n_zero[i]]+1;
  85. ok:=1;
  86. end;
  87. end
  88. else ok:=0;
  89. if (ok<>1) then inc(otkaz);
  90. end;
  91.  
  92. end;
  93.  
  94. {Вычисление интересующих параметров по результатам моделирования}
  95. pzk:=0;
  96. for i:=1 to n_kanalov do pzk:=pzk+t_zan[i]/time_t;
  97. pzk:=pzk/n_kanalov;
  98. tpk:=0;
  99. for i:=1 to n_kanalov do if (n_vyp[i]<>0) then tpk:=tpk+(time_t-t_zan[i])/n_vyp[i];
  100. tpk:=tpk/n_kanalov;
  101. Pobs:=(kolvo-otkaz)/kolvo;
  102. writeln('Число заявок ',kolvo);
  103. writeln('Выполнено ',vypolneno:5:0);
  104. writeln('Вероятность обслуживания ',Pobs:5:3);
  105. writeln('Вероятность занятости канала ',Pzk:5:3);
  106. writeln('Среднее время простоя канала ',tpk/100:5:3);
  107. end.
  108.  
Success #stdin #stdout 0.14s 5300KB
stdin
Standard input is empty
stdout
Число заявок 1000001
Выполнено 839245
Вероятность обслуживания 0.839
Вероятность занятости канала 0.603
Среднее время простоя канала -0.608