Advertisement
Guest User

Untitled

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