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