Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- with Ada.Text_IO;
- use Ada.Text_IO;
- procedure pralnia is
- -------------------------------------------------TYPY
- subtype rano is Integer range 6 .. 9;
- TYPE Godzina_typ IS RANGE 0..24;
- TYPE Minuta_typ IS RANGE 0..60;
- -------------------------------------------------ZMIENNE
- C: Character;
- Szybkosc: Duration := 0.25;
- Minuta: Minuta_typ := 59;
- Godzina: Godzina_Typ := 5;
- Klienci: array (1..100) of Integer := (others => 0);
- --0 nie ma klienta, 1 klient jest w kolejce, 2 klient ma duze pranie, 3 klient obsluzony, 4 klient odebral pranie
- Wskaznik_kolejki: Integer := 1;
- Wskaznik_pralek: Integer := 1;
- Pralka_1: Integer := 0;
- Pralka_2: Integer := 0;
- Pralka_3: Integer := 0;
- Pralka_4: Integer := 0;
- Pralka_5: Integer := 0;
- -------------------------------------------------FUNKCJA SPRAWDZAJACA CZY PRALNIA JEST OTWARTA
- FUNCTION Otwarta RETURN Boolean IS BEGIN
- IF (Godzina >= 6 AND Godzina < 22 ) THEN
- Return True;
- ELSE
- Return False;
- END IF;
- END Otwarta;
- -------------------------------------------------PROCEDURE
- Procedure dodajKlienta is
- begin
- Klienci(Wskaznik_kolejki):=1;
- Wskaznik_kolejki:=Wskaznik_kolejki+1;
- end dodajKlienta;
- Procedure zwiekszSzybkosc is
- begin
- Szybkosc := Szybkosc - 0.10;
- end zwiekszSzybkosc;
- Procedure zmniejszSzybkosc is
- begin
- Szybkosc :=Szybkosc + 0.10;
- end zmniejszSzybkosc;
- -------------------------------------------------TASKI
- TASK Czas is entry Start; end Czas;
- TASK Ekran is entry Start; end Ekran;
- TASK PRALKA1 is entry Start; end PRALKA1;
- TASK PRALKA2 is entry Start; end PRALKA2;
- TASK PRALKA3 is entry Start; end PRALKA3;
- TASK PRALKA4 is entry Start; end PRALKA4;
- TASK PRALKA5 is entry Start; end PRALKA5;
- -------------------------------------------------PRALKA1
- TASK BODY PRALKA1 IS
- BEGIN
- accept Start;
- while true loop
- if(Klienci(Wskaznik_pralek)=1 and Otwarta) then
- Pralka_1:=1;
- Klienci(Wskaznik_pralek):=3;
- Wskaznik_pralek:=Wskaznik_pralek+1;
- delay Szybkosc*60;
- Pralka_1:=2;
- DELAY Szybkosc*5;
- Klienci(Wskaznik_pralek):=4;
- end if;
- end loop;
- END PRALKA1;
- -------------------------------------------------PRALKA2
- TASK BODY PRALKA2 IS
- BEGIN
- accept Start;
- while true loop
- if(Klienci(Wskaznik_pralek)=1 and Otwarta and Pralka_1=1) then
- Pralka_2:=1;
- Klienci(Wskaznik_pralek):=3;
- Wskaznik_pralek:=Wskaznik_pralek+1;
- delay Szybkosc*60;
- Pralka_2:=2;
- DELAY Szybkosc*5;
- Klienci(Wskaznik_pralek):=4;
- end if;
- end loop;
- END PRALKA2;
- -------------------------------------------------PRALKA3
- TASK BODY PRALKA3 IS
- BEGIN
- accept Start;
- while true loop
- if(Klienci(Wskaznik_pralek)=1 and Otwarta and Pralka_1=1 and Pralka_2=1) then
- Pralka_3:=1;
- Klienci(Wskaznik_pralek):=3;
- Wskaznik_pralek:=Wskaznik_pralek+1;
- delay Szybkosc*60;
- Pralka_3:=2;
- DELAY Szybkosc*5;
- Klienci(Wskaznik_pralek):=4;
- end if;
- end loop;
- END PRALKA3;
- -------------------------------------------------PRALKA4
- TASK BODY PRALKA4 IS
- BEGIN
- accept Start;
- while true loop
- if(Klienci(Wskaznik_pralek)=1 and Otwarta and Pralka_1=1 and Pralka_2=1 and Pralka_3=1) then
- Pralka_4:=1;
- Klienci(Wskaznik_pralek):=3;
- Wskaznik_pralek:=Wskaznik_pralek+1;
- delay Szybkosc*60;
- Pralka_4:=2;
- DELAY Szybkosc*5;
- Klienci(Wskaznik_pralek):=4;
- end if;
- end loop;
- END PRALKA4;
- -------------------------------------------------PRALKA5
- TASK BODY PRALKA5 IS
- BEGIN
- accept Start;
- while true loop
- if(Klienci(Wskaznik_pralek)=1 and Otwarta and Pralka_1=1 and Pralka_2=1 and Pralka_3=1 and Pralka_4=1) then
- Pralka_5:=1;
- Klienci(Wskaznik_pralek):=3;
- Wskaznik_pralek:=Wskaznik_pralek+1;
- delay Szybkosc*60;
- Pralka_5:=2;
- DELAY Szybkosc*5;
- Klienci(Wskaznik_pralek):=4;
- end if;
- end loop;
- END PRALKA5;
- -------------------------------------------------ZADANIE USTAWIAJACA CZAS
- TASK BODY Czas IS
- BEGIN
- accept Start;
- WHILE True LOOP
- Minuta:=Minuta+1;
- If(Minuta = 60) THEN
- Minuta := 0;
- Godzina:=Godzina+1;
- If(Godzina = 24) THEN
- Godzina := 0;
- end IF;
- END IF;
- DELAY Szybkosc;
- END LOOP;
- END Czas;
- -------------------------------------------------ZADANIE WYPISUJACE NA EKRANIE
- TASK BODY Ekran IS
- BEGIN
- accept Start;
- WHILE True LOOP
- Put(ASCII.ESC & "[2J");
- Put_Line("Zegar: " & Godzina'Img & ":" & Minuta'Img);
- if (Pralka_1 = 0 )then Put_Line("Pralka 1: Wolna");
- elsif (Pralka_1 = 1)then Put_Line("Pralka 1: Pierze");
- else Put_Line("Pralka 1: Wyciaganie prania");
- end if;
- if (Pralka_2 = 0 )then Put_Line("Pralka 2: Wolna");
- elsif (Pralka_2 = 1)then Put_Line("Pralka 2: Pierze");
- else Put_Line("Pralka 2: Wyciaganie prania");
- end if;
- if (Pralka_3 = 0 )then Put_Line("Pralka 3: Wolna");
- elsif (Pralka_3 = 1)then Put_Line("Pralka 3: Pierze");
- else Put_Line("Pralka 3: Wyciaganie prania");
- end if;
- if (Pralka_4 = 0 )then Put_Line("Pralka 4: Wolna");
- elsif (Pralka_4 = 1)then Put_Line("Pralka 4: Pierze");
- else Put_Line("Pralka 4: Wyciaganie prania");
- end if;
- if (Pralka_5 = 0 )then Put_Line("Pralka 5: Wolna");
- elsif (Pralka_5 = 1)then Put_Line("Pralka 5: Pierze");
- else Put_Line("Pralka 5: Wyciaganie prania");
- end if;
- if(Wskaznik_kolejki > 10) then
- for I in (Wskaznik_kolejki - 10)..Wskaznik_kolejki loop
- if(Klienci(I) = 0)then put("");
- elsif(Klienci(I) = 1) then Put_Line("klient nr#"& I'Img & "czeka w kolejce");
- elsif(Klienci(I) = 2) then Put_Line("klient nr#"& I'Img & "ma duze pranie i czeka w kolejce");
- elsif(Klienci(I) = 3) then Put_Line("klient nr#"& I'Img & "zostal obsluzony");
- else Put_Line("klient nr#"& I'Img & "odebral pranie");
- end if;
- end loop;
- else
- for I in 1..Wskaznik_kolejki loop
- if(Klienci(I) = 0)then put("");
- elsif(Klienci(I) = 1)then Put_Line("klient nr#"& I'Img & "czeka w kolejce");
- elsif(Klienci(I) = 2)then Put_Line("klient nr#"& I'Img & "ma duze pranie i czeka w kolejce");
- elsif(Klienci(I) = 3)then Put_Line("klient nr#"& I'Img & "zostal obsluzony");
- else Put_Line("klient nr#"& I'Img & "odebral pranie");
- end if;
- end loop;
- end if;
- end loop;
- END Ekran;
- begin
- Czas.Start;
- Ekran.Start;
- PRALKA1.Start;
- PRALKA2.Start;
- PRALKA3.Start;
- PRALKA4.Start;
- PRALKA5.Start;
- -- Klienci.Start;
- loop
- Get(C);
- case C is
- WHEN 'f' => zwiekszSzybkosc;
- WHEN 's' => zmniejszSzybkosc;
- WHEN 'a' => dodajKlienta;
- WHEN others => put ("");
- end case;
- end loop;
- END pralnia;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement