Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Zadanie Producent i Konsument
- -- Artur Malinowski
- -- grupa 3
- -- 125 683
- With Ada.Text_IO, Ada.Integer_Text_IO, Ada.Numerics.Discrete_Random, Samochody;
- Use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Numerics, Samochody;
- procedure prod_kons is
- -- struktury globalne
- WSalonie: TablicaSamochodow;
- ilosc : Integer := 0; -- ilosc elementow w tablicy WSalonie
- -- potrzebne do losowanie liczb calkowitych
- package Losowa is new Discrete_Random(Integer);
- generuj : Losowa.Generator;
- -- zadania
- task Producent;
- task Konsumenci;
- task Salon is
- entry Dostawa (nowe: in produkcja);
- entry Zakup (wybor: in Integer; nowy: out Samochod);
- end Salon;
- task body Producent is
- nowe : produkcja;
- begin
- loop
- nowe(1):=(bialy, sedan, 1.4);
- nowe(2):=(czerwony, sedan, 1.6);
- nowe(3):=(czarny, kombi, 1.6);
- nowe(4):=(czerwony, kombi, 1.8);
- delay 5.0;
- Put_Line("PRODUCENT: Samochody wyprodukowano, czekaja na odbior");
- Salon.Dostawa(nowe);
- end loop;
- end Producent;
- task body Konsumenci is
- nowy : Samochod;
- wybor : Integer;
- begin
- loop
- if (ilosc > Losowa.Random(generuj) mod 10) then -- klient potrzebuje pewnej ilosci zeby wybrac
- wybor := Losowa.Random(generuj) mod ilosc + 1; -- wybor symuluje losowanie
- delay 2.0;
- Put("KONSUMENT: Chce kupic samochod nr");
- Put(wybor,3);
- Put_Line("");
- Salon.Zakup(wybor, nowy);
- end if;
- end loop;
- end Konsumenci;
- task body Salon is
- begin
- loop
- select
- when ilosc > 0 => -- klient moze kupowac tylko jesli sa samochody
- accept Zakup (wybor: in Integer; nowy: out Samochod) do
- nowy := WSalonie(wybor);
- WSalonie(wybor) := WSalonie (ilosc);
- ilosc := ilosc - 1;
- Put_Line("SALON : Klient kupil samochod");
- end Zakup;
- or
- when ilosc < 15 => -- salon przyjmuje dostawe tylko kiedy potrzebne sa nowe samochody
- accept Dostawa (nowe: in produkcja) do
- for i in 1 .. 4 loop
- WSalonie(ilosc+i) := nowe (i);
- end loop;
- ilosc := ilosc + 4;
- Put_Line("SALON : Dowieziono 4 samochody");
- end Dostawa;
- else -- w wypadku, gdy zaden klient nie kupuje, producent nie produkuje
- Put("SALON : Bezczynny, mamy: ");
- Put(ilosc,3);
- Put_Line(" samochodow");
- WypiszSamochody (WSalonie, ilosc);
- delay 1.5;
- end select;
- end loop;
- end Salon;
- begin
- Put("");
- end prod_kons;
Add Comment
Please, Sign In to add comment