Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. MAIN MODULE bank;
  2. FROM SimMod IMPORT StartSimulation, SimTime, StopSimulation, InterruptMethod;
  3. FROM RandMod IMPORT RandomObj;
  4. FROM StatMod IMPORT IStatObj, ITimedStatObj, TSINTEGER, SREAL, RStatObj;
  5. FROM IOMod IMPORT StreamObj, ALL FileUseType;
  6. FROM ListMod IMPORT QueueList;
  7.  
  8. TYPE
  9. KlientRec = RECORD
  10. czasWej: REAL;
  11. nr: INTEGER;
  12. czasCierp: REAL;
  13. actid: ACTID;
  14. END RECORD;
  15.  
  16. KolejkaObj = OBJECT; FORWARD;
  17.  
  18. OtoczenieObj = OBJECT(RandomObj);
  19. lambda: REAL;
  20. kolejka: KolejkaObj;
  21. liczKlDoWygen: INTEGER;
  22. ASK METHOD Init(IN lbd: REAL; IN kol: KolejkaObj; IN lk: INTEGER);
  23. TELL METHOD GenerujKlientow();
  24. END OBJECT;
  25.  
  26. GniazdoObj = OBJECT(RandomObj);
  27. mi: REAL;
  28. liczOkienek: INTEGER;
  29. liczZajOkienek: TSINTEGER;
  30. kolejka: KolejkaObj;
  31. czasObslugi: SREAL;
  32. ASK METHOD Init(IN m: REAL; IN lo: INTEGER; IN kol: KolejkaObj);
  33. TELL METHOD Obsluguj();
  34. END OBJECT;
  35.  
  36. KolejkaObj = OBJECT(QueueList);
  37. maxDlugosc: INTEGER;
  38. gniazdo: GniazdoObj;
  39. dlugosc: TSINTEGER;
  40. ASK METHOD Init(IN maxdl: INTEGER; IN gnd: GniazdoObj);
  41. ASK METHOD Wstaw(IN klient: KlientRec);
  42. ASK METHOD Usun(): KlientRec;
  43. TELL METHOD Niecierpliwosc (IN kl: KlientRec);
  44. END OBJECT;
  45.  
  46.  
  47. OBJECT OtoczenieObj;
  48. ASK METHOD Init(IN lbd: REAL; IN kol: KolejkaObj; IN lk: INTEGER);
  49. BEGIN
  50. lambda:= lbd;
  51. liczKlDoWygen:=lk;
  52. kolejka:=kol;
  53. END METHOD;
  54.  
  55. TELL METHOD GenerujKlientow();
  56. VAR i: INTEGER;
  57. VAR a: REAL;
  58. kl: KlientRec;
  59.  
  60. BEGIN
  61. a:= 2.0;
  62. FOR i:= 1 TO liczKlDoWygen
  63. WAIT DURATION Exponential(1.0 / lambda)
  64. NEW(kl);
  65. kl.czasCierp := Exponential(1.0/a);
  66. ASK kolejka TO Wstaw(kl);
  67. ON INTERRUPT
  68. END WAIT;
  69. END FOR;
  70. END METHOD;
  71. END OBJECT;
  72.  
  73. OBJECT GniazdoObj;
  74.  
  75. ASK METHOD Init(IN m: REAL;IN lo: INTEGER; IN kol: KolejkaObj);
  76. BEGIN
  77. mi:=m;
  78. liczOkienek:=lo;
  79. kolejka:=kol;
  80. END METHOD;
  81.  
  82. TELL METHOD Obsluguj();
  83. VAR kl: KlientRec;
  84. BEGIN
  85. INC(liczZajOkienek);
  86. WHILE ASK kolejka TO numberIn > 0
  87. kl := ASK kolejka TO Usun();
  88. InterruptMethod(kl.actid);
  89. WAIT DURATION Exponential(1.0/mi)
  90. czasObslugi:=SimTime - kl.czasWej;
  91. DISPOSE(kl);
  92. ON INTERRUPT
  93. END WAIT;
  94. END WHILE;
  95. DEC(liczZajOkienek);
  96. END METHOD;
  97. END OBJECT;
  98.  
  99. OBJECT KolejkaObj;
  100.  
  101. ASK METHOD Init(IN maxdl: INTEGER; IN gnd: GniazdoObj);
  102. BEGIN
  103. maxDlugosc:=maxdl;
  104. gniazdo := gnd;
  105. END METHOD;
  106.  
  107. ASK METHOD Usun(): KlientRec;
  108. BEGIN
  109. IF dlugosc > 0
  110. DEC(dlugosc);
  111. END IF;
  112. RETURN Remove();
  113. END METHOD;
  114.  
  115. TELL METHOD Niecierpliwosc(IN kl: KlientRec);
  116. BEGIN
  117. WAIT DURATION kl.czasCierp
  118. RemoveThis(kl);
  119. DISPOSE(kl);
  120. ON INTERRUPT
  121. END WAIT;
  122. END METHOD;
  123.  
  124. ASK METHOD Wstaw(IN klient: KlientRec);
  125. BEGIN
  126. IF maxDlugosc > numberIn
  127. INC(dlugosc);
  128. klient.czasWej:=SimTime;
  129. Add(klient);
  130. klient.actid := TELL SELF TO Niecierpliwosc(klient);
  131. IF gniazdo.liczZajOkienek < gniazdo.liczOkienek
  132. TELL gniazdo TO Obsluguj;
  133. END IF;
  134. ELSE
  135. DISPOSE(klient);
  136. END IF;
  137. END METHOD;
  138.  
  139. END OBJECT;
  140.  
  141. VAR
  142. otoczenie: OtoczenieObj;
  143. gniazdo: GniazdoObj;
  144. kol: KolejkaObj;
  145. plik: StreamObj;
  146. monITS: ITimedStatObj;
  147. monRS: RStatObj;
  148. BEGIN
  149. NEW(otoczenie);
  150. NEW(gniazdo);
  151. NEW(kol);
  152. ASK otoczenie TO Init(1.5,kol,1000);
  153. ASK gniazdo TO Init(2.0, 1 , kol);
  154. ASK kol TO Init(10, gniazdo);
  155. TELL otoczenie TO GenerujKlientow();
  156. StartSimulation;
  157.  
  158. NEW(plik);
  159. ASK plik TO Open("wyniki.txt",Output);
  160.  
  161. ASK plik TO WriteString("srednia dlugosc kolejki: ");
  162.  
  163.  
  164. monITS:= GETMONITOR(ASK kol TO dlugosc, ITimedStatObj);
  165. ASK plik TO WriteLn;
  166. ASK plik TO WriteString("sredni czas obslugi klienta: ");
  167. monRS:=GETMONITOR(ASK gniazdo TO czasObslugi, RStatObj);
  168. ASK plik TO WriteReal(ASK monRS TO Mean, 10, 4);
  169. ASK plik TO WriteLn;
  170. ASK plik TO WriteString("odchylenie standardowe dla kolejki: ");
  171. ASK plik TO WriteReal(ASK monITS TO StdDev, 10, 4);
  172. ASK plik TO WriteLn;
  173. ASK plik TO WriteString("odchylenie standardowe dla obslugi klienta: ");
  174. ASK plik TO WriteReal(ASK monRS TO StdDev, 10, 4);
  175. ASK plik TO WriteLn;
  176. ASK plik TO Close;
  177. DISPOSE(plik);
  178. DISPOSE(otoczenie);
  179. DISPOSE(gniazdo);
  180. DISPOSE(kol);
  181. OUTPUT("koniec");
  182. END MODULE.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement