Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.01 KB | None | 0 0
  1. WITH Ada.Text_IO, Ada.Numerics.Discrete_Random, fifo, lib_ksiazka;
  2. USE Ada.Text_IO, lib_ksiazka;
  3.  
  4.  
  5. PROCEDURE Biblioteka IS
  6. -----------------Globalne------------------
  7. Is_Opened: Boolean := True;
  8. TYPE Hours_Type IS RANGE 0..23;
  9. TYPE Minutes_Type IS RANGE 0..59;
  10.  
  11. Minute_Duration: CONSTANT Duration := 0.01;
  12. Open_Hour: CONSTANT Hours_Type := 8;
  13. Close_Hour: CONSTANT Hours_Type := 17;
  14.  
  15.  
  16. Hours: Hours_Type :=6;
  17. Minutes: Minutes_Type := 0;
  18. --------------- Losowanie ksiazki----------
  19.  
  20. PACKAGE Losuj_Ksiazke IS NEW Ada.Numerics.Discrete_Random(Ksiazka);
  21.  
  22. USE Losuj_Ksiazke;
  23. Gen: Generator;
  24.  
  25. ----------------Klient-----------------
  26.  
  27. TASK TYPE Klient IS
  28. Entry Start(K: Ksiazka);
  29.  
  30. END Klient;
  31.  
  32. TYPE Klient_Wskaznik IS ACCESS Klient;
  33.  
  34.  
  35. TASK BODY Klient IS
  36. K: Ksiazka := Brak;
  37. Do_Zwrotu: Boolean := false;
  38. BEGIN
  39. ACCEPT Start(K: Ksiazka);
  40.  
  41.  
  42.  
  43. END Klient;
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. --------------Bibliotekarz--------------
  51.  
  52. TASK TYPE Bibliotekarz IS
  53. ENTRY Ustaw_Klienta(klient: Klient_Wskaznik);
  54. ENTRY Wypozycz(K:Ksiazka);
  55. ENTRY Zwroc(K: Ksiazka);
  56.  
  57.  
  58. END Bibliotekarz;
  59.  
  60. TYPE Bibliotekarz_Wskaznik IS ACCESS Bibliotekarz;
  61.  
  62. TASK BODY Bibliotekarz IS
  63. Wk: Klient_Wskaznik:=NULL;
  64. Ja: Bibliotekarz_Wskaznik:=NULL;
  65. BEGIN
  66. LOOP
  67. SELECT
  68. WHEN (wk=NULL AND is_Opened)=>
  69. --kolejka.GetKlient
  70. ACCEPT Ustaw_Klienta(Klient: Klient_Wskaznik) DO
  71. Wk := Klient;
  72.  
  73. END Ustaw_Klienta;
  74. --wk.obsluz;
  75.  
  76. OR
  77.  
  78. WHEN Wk /= NULL =>
  79. ACCEPT Wypozycz(K: Ksiazka) DO
  80. Wk:=NULL;
  81. END Wypozycz;
  82.  
  83.  
  84.  
  85. OR
  86. WHEN Wk/= NULL =>
  87. ACCEPT Zwroc(K: Ksiazka) DO
  88. Wk:=NULL;
  89. END Zwroc;
  90.  
  91.  
  92. END SELECT;
  93. END LOOP;
  94.  
  95. END Bibliotekarz;
  96.  
  97.  
  98.  
  99.  
  100. ---------------Funkcja-----------------
  101. FUNCTION Set_Is_Opened RETURN Boolean IS BEGIN
  102. IF (Hours >= Open_Hour AND Hours < Close_Hour) THEN
  103. Return True;
  104. ELSE
  105. Return False;
  106. END IF;
  107. END Set_Is_Opened;
  108.  
  109. --------------Czasomierz--------------
  110.  
  111.  
  112. TASK TYPE Czasomierz;
  113.  
  114.  
  115. TASK BODY Czasomierz IS
  116. BEGIN
  117. WHILE True LOOP
  118. IF(Minutes = Minutes_Type'Last) THEN
  119. Minutes :=0;
  120. IF(Hours = Hours_Type'Last) THEN
  121. Hours:=0;
  122. ELSE
  123. Hours := Hours + 1;
  124. END IF;
  125. ELSE
  126. Minutes := Minutes + 1;
  127. END IF;
  128. Is_Opened :=Set_Is_Opened;
  129. DELAY Minute_Duration;
  130. --Put_Line("station time: " & Hours'Img & ":" & Minutes'Img);
  131. END LOOP;
  132. END Czasomierz;
  133.  
  134.  
  135. --------------Kolejka-----------
  136.  
  137. package Kolejka_Klientow is new Fifo(Klient_Wskaznik);
  138. USE Kolejka_Klientow;
  139.  
  140.  
  141.  
  142. TASK TYPE Kolejka IS
  143. ENTRY Dodaj_Klienta(kw: Klient_Wskaznik);
  144. ENTRY Pobierz_Klienta(bw: Bibliotekarz_Wskaznik);
  145. END;
  146.  
  147.  
  148. TASK BODY Kolejka IS
  149. My_Fifo : Fifo_Type;
  150. Klient_Do_Obslugi: Klient_Wskaznik;
  151.  
  152. BEGIN
  153. LOOP
  154. SELECT
  155. ACCEPT Dodaj_Klienta(kw: Klient_Wskaznik) DO
  156. Push(My_Fifo, Kw);
  157. END Dodaj_Klienta;
  158.  
  159. OR
  160.  
  161. ACCEPT Pobierz_Klienta(bw: Bibliotekarz_Wskaznik) DO
  162. IF(Is_Empty(MY_Fifo)) THEN
  163. Put_Line("pusta kolejka");
  164. Bw.ustaw_Klienta(null);
  165. ELSE
  166. Pop(My_Fifo, Klient_Do_Obslugi);
  167. Bw.ustaw_Klienta(Klient_Do_Obslugi);
  168. END IF;
  169. END Pobierz_Klienta;
  170. END SELECT;
  171. END LOOP;
  172. END Kolejka;
  173.  
  174. kolejkaKlientow: Kolejka;
  175.  
  176.  
  177. ------------GeneratorKlientów-------------
  178. TASK TYPE Generator_Klientow IS
  179. Entry Dodaj_Do_Kolejki;
  180. END Generator_Klientow;
  181.  
  182.  
  183. TASK BODY Generator_Klientow IS
  184. Wsk: Klient_Wskaznik;
  185. BEGIN
  186. LOOP
  187. SELECT
  188. WHEN Is_Opened =>
  189. ACCEPT Dodaj_Do_Kolejki DO
  190. Put_Line("Dodaje do kolejki");
  191. Wsk := NEW Klient;
  192. kolejkaKlientow.Dodaj_Klienta(Wsk);
  193. END Dodaj_Do_Kolejki;
  194. OR WHEN Is_Opened =>
  195. DELAY 0.1;
  196. Put_Line("Dodaje do kolejki");
  197. OR
  198. delay 0.1;
  199.  
  200.  
  201.  
  202. END SELECT;
  203. END LOOP;
  204. END Generator_Klientow;
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211. Cz: Czasomierz;
  212. T: Rekord_Ksiazki;
  213. S: Baza_Ksiazek(1..1);
  214. Klient1: Klient_Wskaznik;
  215. Generator: Generator_Klientow;
  216.  
  217.  
  218. BEGIN
  219. Reset(Gen);
  220. Klient1 := NEW Klient;
  221.  
  222.  
  223.  
  224.  
  225. END Biblioteka;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement