Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 6.81 KB | None | 0 0
  1. with Ada.Text_IO;
  2. use Ada.Text_IO;
  3.  
  4. procedure pralnia is
  5.  
  6. -------------------------------------------------TYPY
  7. subtype rano is Integer range 6 .. 9;
  8. TYPE Godzina_typ IS RANGE 0..24;
  9. TYPE Minuta_typ IS RANGE 0..60;
  10. -------------------------------------------------ZMIENNE
  11. C: Character;
  12.  
  13. Szybkosc: Duration := 0.25;
  14. Minuta: Minuta_typ := 59;
  15. Godzina: Godzina_Typ := 5;
  16.  
  17. Klienci: array (1..100) of Integer := (others => 0);
  18. --0 nie ma klienta, 1 klient jest w kolejce, 2 klient ma duze pranie, 3 klient obsluzony, 4 klient odebral pranie
  19. Wskaznik_kolejki: Integer := 1;
  20. Wskaznik_pralek: Integer := 1;
  21. Pralka_1: Integer := 0;
  22. Pralka_2: Integer := 0;
  23. Pralka_3: Integer := 0;
  24. Pralka_4: Integer := 0;
  25. Pralka_5: Integer := 0;
  26.  
  27. -------------------------------------------------FUNKCJA SPRAWDZAJACA CZY PRALNIA JEST OTWARTA
  28.  FUNCTION Otwarta RETURN Boolean IS BEGIN
  29.       IF (Godzina >= 6 AND Godzina < 22 ) THEN
  30.          Return True;
  31.       ELSE
  32.          Return False;
  33.       END IF;
  34.    END Otwarta;
  35. -------------------------------------------------PROCEDURE
  36.    Procedure dodajKlienta is
  37.    begin
  38.       Klienci(Wskaznik_kolejki):=1;
  39.       Wskaznik_kolejki:=Wskaznik_kolejki+1;
  40.    end dodajKlienta;
  41.  
  42.    Procedure zwiekszSzybkosc is
  43.    begin
  44.    Szybkosc := Szybkosc - 0.10;
  45.    end zwiekszSzybkosc;
  46.  
  47.    Procedure zmniejszSzybkosc is
  48.    begin
  49.    Szybkosc :=Szybkosc + 0.10;
  50.    end zmniejszSzybkosc;
  51. -------------------------------------------------TASKI
  52. TASK Czas is entry Start; end Czas;
  53. TASK Ekran is entry Start; end Ekran;
  54. TASK PRALKA1 is entry Start; end PRALKA1;
  55. TASK PRALKA2 is entry Start; end PRALKA2;
  56. TASK PRALKA3 is entry Start; end PRALKA3;
  57. TASK PRALKA4 is entry Start; end PRALKA4;
  58. TASK PRALKA5 is entry Start; end PRALKA5;
  59. -------------------------------------------------PRALKA1
  60. TASK BODY PRALKA1 IS
  61. BEGIN
  62.     accept Start;
  63.     while true loop
  64.         if(Klienci(Wskaznik_pralek)=1 and Otwarta) then
  65.             Pralka_1:=1;
  66.             Klienci(Wskaznik_pralek):=3;
  67.             Wskaznik_pralek:=Wskaznik_pralek+1;
  68.             delay Szybkosc*60;
  69.             Pralka_1:=2;
  70.                         DELAY Szybkosc*5;
  71.                     Klienci(Wskaznik_pralek):=4;
  72.         end if;
  73.     end loop;
  74. END PRALKA1;
  75. -------------------------------------------------PRALKA2
  76. TASK BODY PRALKA2 IS
  77. BEGIN
  78.     accept Start;
  79.     while true loop
  80.         if(Klienci(Wskaznik_pralek)=1 and Otwarta and Pralka_1=1) then
  81.             Pralka_2:=1;
  82.             Klienci(Wskaznik_pralek):=3;
  83.             Wskaznik_pralek:=Wskaznik_pralek+1;
  84.             delay Szybkosc*60;
  85.             Pralka_2:=2;
  86.                         DELAY Szybkosc*5;
  87.                     Klienci(Wskaznik_pralek):=4;
  88.         end if;
  89.     end loop;
  90. END PRALKA2;
  91. -------------------------------------------------PRALKA3
  92. TASK BODY PRALKA3 IS
  93. BEGIN
  94.     accept Start;
  95.     while true loop
  96.         if(Klienci(Wskaznik_pralek)=1 and Otwarta and Pralka_1=1 and Pralka_2=1) then
  97.             Pralka_3:=1;
  98.             Klienci(Wskaznik_pralek):=3;
  99.             Wskaznik_pralek:=Wskaznik_pralek+1;
  100.             delay Szybkosc*60;
  101.             Pralka_3:=2;
  102.                         DELAY Szybkosc*5;
  103.                     Klienci(Wskaznik_pralek):=4;
  104.         end if;
  105.     end loop;
  106. END PRALKA3;
  107. -------------------------------------------------PRALKA4
  108. TASK BODY PRALKA4 IS
  109. BEGIN
  110.     accept Start;
  111.     while true loop
  112.         if(Klienci(Wskaznik_pralek)=1 and Otwarta and Pralka_1=1 and Pralka_2=1 and Pralka_3=1) then
  113.             Pralka_4:=1;
  114.             Klienci(Wskaznik_pralek):=3;
  115.             Wskaznik_pralek:=Wskaznik_pralek+1;
  116.             delay Szybkosc*60;
  117.             Pralka_4:=2;
  118.                         DELAY Szybkosc*5;
  119.                     Klienci(Wskaznik_pralek):=4;
  120.         end if;
  121.     end loop;
  122. END PRALKA4;
  123. -------------------------------------------------PRALKA5
  124. TASK BODY PRALKA5 IS
  125. BEGIN
  126.     accept Start;
  127.     while true loop
  128.         if(Klienci(Wskaznik_pralek)=1 and Otwarta and Pralka_1=1 and Pralka_2=1 and Pralka_3=1 and Pralka_4=1) then
  129.             Pralka_5:=1;
  130.             Klienci(Wskaznik_pralek):=3;
  131.             Wskaznik_pralek:=Wskaznik_pralek+1;
  132.             delay Szybkosc*60;
  133.             Pralka_5:=2;
  134.                         DELAY Szybkosc*5;
  135.                     Klienci(Wskaznik_pralek):=4;
  136.         end if;
  137.     end loop;
  138. END PRALKA5;
  139. -------------------------------------------------ZADANIE USTAWIAJACA CZAS
  140.  TASK BODY Czas IS
  141.             BEGIN
  142.                accept Start;
  143.       WHILE True LOOP
  144.        Minuta:=Minuta+1;
  145.     If(Minuta = 60) THEN
  146.             Minuta := 0;
  147.         Godzina:=Godzina+1;
  148.         If(Godzina = 24) THEN
  149.             Godzina := 0;
  150.         end IF;
  151.          END IF;
  152. DELAY Szybkosc;
  153.       END LOOP;
  154.    END Czas;
  155. -------------------------------------------------ZADANIE WYPISUJACE NA EKRANIE
  156.  TASK BODY Ekran IS
  157.     BEGIN
  158.         accept Start;
  159.         WHILE True LOOP
  160.             Put(ASCII.ESC & "[2J");
  161.             Put_Line("Zegar: " & Godzina'Img & ":" & Minuta'Img);
  162.             if (Pralka_1 = 0 )then Put_Line("Pralka 1: Wolna");
  163.             elsif (Pralka_1 = 1)then  Put_Line("Pralka 1: Pierze");
  164.             else Put_Line("Pralka 1: Wyciaganie prania");
  165.             end if;
  166.             if (Pralka_2 = 0 )then Put_Line("Pralka 2: Wolna");
  167.             elsif (Pralka_2 = 1)then  Put_Line("Pralka 2: Pierze");
  168.             else Put_Line("Pralka 2: Wyciaganie prania");
  169.             end if;
  170.             if (Pralka_3 = 0 )then Put_Line("Pralka 3: Wolna");
  171.             elsif (Pralka_3 = 1)then  Put_Line("Pralka 3: Pierze");
  172.             else Put_Line("Pralka 3: Wyciaganie prania");
  173.             end if;
  174.             if (Pralka_4 = 0 )then Put_Line("Pralka 4: Wolna");
  175.             elsif (Pralka_4 = 1)then  Put_Line("Pralka 4: Pierze");
  176.             else Put_Line("Pralka 4: Wyciaganie prania");
  177.             end if;
  178.             if (Pralka_5 = 0 )then Put_Line("Pralka 5: Wolna");
  179.             elsif (Pralka_5 = 1)then  Put_Line("Pralka 5: Pierze");
  180.             else Put_Line("Pralka 5: Wyciaganie prania");
  181.             end if;
  182.             if(Wskaznik_kolejki > 10) then
  183.             for I in (Wskaznik_kolejki - 10)..Wskaznik_kolejki loop
  184.                 if(Klienci(I) = 0)then put("");
  185.                 elsif(Klienci(I) = 1) then Put_Line("klient nr#"& I'Img & "czeka w kolejce");
  186.                 elsif(Klienci(I) = 2) then Put_Line("klient nr#"& I'Img & "ma duze pranie i czeka w kolejce");
  187.                 elsif(Klienci(I) = 3) then Put_Line("klient nr#"& I'Img & "zostal obsluzony");
  188.                 else  Put_Line("klient nr#"& I'Img & "odebral pranie");
  189.                 end if;
  190.             end loop;
  191.             else
  192.                 for I in 1..Wskaznik_kolejki loop
  193.                     if(Klienci(I) = 0)then put("");
  194.                     elsif(Klienci(I) = 1)then Put_Line("klient nr#"& I'Img & "czeka w kolejce");
  195.                     elsif(Klienci(I) = 2)then Put_Line("klient nr#"& I'Img & "ma duze pranie i czeka w kolejce");
  196.                     elsif(Klienci(I) = 3)then Put_Line("klient nr#"& I'Img & "zostal obsluzony");
  197.                     else Put_Line("klient nr#"& I'Img & "odebral pranie");
  198.                     end if;
  199.                 end loop;
  200.             end if;
  201.         end loop;
  202.     END Ekran;
  203. begin
  204.    Czas.Start;
  205.    Ekran.Start;
  206.    PRALKA1.Start;
  207.    PRALKA2.Start;
  208.    PRALKA3.Start;
  209.    PRALKA4.Start;
  210.    PRALKA5.Start;
  211.   -- Klienci.Start;
  212.     loop
  213.         Get(C);
  214.         case C is
  215.             WHEN 'f' => zwiekszSzybkosc;
  216.             WHEN 's' => zmniejszSzybkosc;
  217.             WHEN 'a' => dodajKlienta;
  218.             WHEN others =>  put ("");
  219.         end case;
  220.     end loop;
  221.  
  222. END pralnia;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement