Guest User

Untitled

a guest
May 26th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.60 KB | None | 0 0
  1. unit Model;
  2. interface
  3. implementation
  4. uses
  5. uTestFunkcje, uTypyOrazStale;
  6.  
  7. var
  8. atSideA : boolean;
  9. atShore : boolean;
  10.  
  11. queueAtA: integer;
  12. queueAtB: integer;
  13.  
  14. passengersCount : integer;
  15. temp : integer;
  16.  
  17. procedure inicjalizacja;
  18. begin
  19.  
  20. //Inicjalizacja zmiennych
  21. queueAtA:=0;
  22. queueAtB:=0;
  23. passengersCount:=0;
  24. atShore :=true;
  25. atSideA := true;
  26.  
  27. { Pierwszy pasazer na brzegu A }
  28. _Atrib [1] := _T0;
  29. _Atrib [2] := 1;
  30. Filem (1);
  31.  
  32. { Pierwszy pasazer na brzegu B }
  33. _Atrib [1] := _T0;
  34. _Atrib [2] := 2;
  35. Filem (1);
  36.  
  37. {Prom wyrusza za 5 minut}
  38. _Atrib [1] := _T+5;
  39. _Atrib [2] := 4;
  40. Filem (1);
  41.  
  42. GenInit (1, 0, 5, 1, 1); //generator A;
  43. GenInit (3, 0, 7, 1, 2); //generator B;
  44. GenInit (10, 8, 12, 3, 3); //generator czasu przeprawy;
  45. end; { inicjalizacja }
  46.  
  47. procedure wybor_zdarzenia (kod : integer);
  48. begin
  49. case kod of
  50. 1: { Przyjscie pasazera na brzeg A }
  51. begin
  52. { zaplanowanie zdarzenia przybycia następnego zgłoszenia }
  53. _Atrib [1] := _T + Erlng (1);
  54. _Atrib [2] := 1;
  55. Filem (1);
  56.  
  57. { Prom jest po stronie A - przy brzegu }
  58. if atSideA and atShore then
  59. begin
  60.  
  61. { Wolne miejsce na promie }
  62. if passengersCount < 20 then
  63. begin
  64. passengersCount := passengersCount + 1;
  65. end;
  66.  
  67. if passengersCount = 20 then
  68. begin
  69. { Wyszukanie zaplanowanego zdarzenia odplyniecia promu }
  70. temp := Nfind(4, 5, 1, 2, 0);
  71.  
  72. { Anulowanie zdarzenia odplyniecia promu }
  73. if temp <> 0 then
  74. Cancl(temp);
  75.  
  76. { Odplyniecie promu }
  77. _Atrib [1] := _T;
  78. _Atrib [2] := 4;
  79. Filem (1);
  80. end;
  81.  
  82. end
  83. else
  84. begin
  85. queueAtA := queueAtA + 1;
  86. end
  87. end;
  88.  
  89. 2: { Przyjscie pasazera na brzeg A }
  90. begin
  91. { zaplanowanie zdarzenia przybycia następnego pasazera }
  92. _Atrib [1] := _T + Erlng (2);
  93. _Atrib [2] := 2;
  94. Filem (1);
  95.  
  96. { Prom jest po stronie B - przy brzegu }
  97. if (not atSideA) and atShore then
  98. begin
  99.  
  100. { Wolne miejsce na promie }
  101. if passengersCount < 20 then
  102. begin
  103. passengersCount := passengersCount + 1;
  104. end;
  105.  
  106. if passengersCount = 20 then
  107. begin
  108. { Wyszukanie zaplanowanego zdarzenia odplyniecia promu }
  109. temp := Nfind(4, 5, 1, 2, 0);
  110.  
  111. { Anulowanie zdarzenia odplyniecia promu }
  112. if temp <> 0 then
  113. Cancl(temp);
  114.  
  115. { Odplyniecie promu }
  116. _Atrib [1] := _T;
  117. _Atrib [2] := 4;
  118. Filem (1);
  119. end;
  120.  
  121. end
  122. else
  123. begin
  124. queueAtB := queueAtB + 1;
  125. end
  126. end;
  127.  
  128. 3: { Zdarzenie przyplyniecia promu }
  129. begin
  130. atShore := true;
  131. passengersCount := 0;
  132.  
  133. { Prom po stronie A }
  134. if atSideA then
  135. begin
  136.  
  137. { Załadowanie całej kolejki na prom }
  138. if queueAtA < 20 then
  139. begin
  140. passengersCount := queueAtA;
  141. queueAtA := 0;
  142. end
  143. else
  144. begin
  145. passengersCount := 20;
  146. queueAtA := queueAtA - 20;
  147.  
  148. { Odplyniecie promu }
  149. _Atrib [1] := _T;
  150. _Atrib [2] := 4;
  151. Filem (1);
  152. atShore :=false;
  153. end
  154.  
  155. end
  156. else { Prom po stronie B }
  157. begin
  158.  
  159. { Załadowanie całej kolejki na prom }
  160. if queueAtB < 20 then
  161. begin
  162. passengersCount := queueAtB;
  163. queueAtB := 0;
  164. end
  165. else
  166. begin
  167. passengersCount := 20;
  168. queueAtB := queueAtB - 20;
  169.  
  170. { Odplyniecie promu }
  171. _Atrib [1] := _T;
  172. _Atrib [2] := 4;
  173. Filem (1);
  174. atShore :=false;
  175. end
  176. end;
  177.  
  178. { Zaplanowanie zdarzenia odplyniecia na +5min }
  179. if atShore then
  180. begin
  181. _Atrib [1] := _T + 5;
  182. _Atrib [2] := 4;
  183. Filem (1);
  184. end
  185. end;
  186.  
  187. 4: { Zdarzenie odplynicia promu }
  188. begin
  189. atShore :=false;
  190.  
  191. { Wypelnienie hostogramow opisujacych liczbe pasazerow}
  192. if atSideA then
  193. Histo(passengersCount, 1)
  194. else
  195. Histo(passengersCount, 2);
  196.  
  197. if atSideA then
  198. atSideA := false
  199. else
  200. atSideA := true;
  201.  
  202. { Zaplanowanie zdarzenia przyplyniecia promu }
  203. _Atrib [1] := _T + Rnorm(3);
  204. _Atrib [2] := 3;
  205. Filem (1);
  206. end;
  207. end { case }
  208. end; { wybor_zdarzenia }
  209.  
  210. initialization
  211. Intlc := inicjalizacja;
  212. Evnts := wybor_zdarzenia;
  213. end.
Add Comment
Please, Sign In to add comment