Guest User

Untitled

a guest
Feb 18th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 2.80 KB | None | 0 0
  1. -- Zadanie Producent i Konsument
  2. -- Artur Malinowski
  3. -- grupa 3
  4. -- 125 683
  5.  
  6. With Ada.Text_IO, Ada.Integer_Text_IO, Ada.Numerics.Discrete_Random, Samochody;
  7. Use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Numerics, Samochody;
  8.  
  9. procedure prod_kons is
  10.  
  11.    -- struktury globalne
  12.    WSalonie: TablicaSamochodow;
  13.    ilosc : Integer := 0;  -- ilosc elementow w tablicy WSalonie
  14.  
  15.    -- potrzebne do losowanie liczb calkowitych
  16.    package Losowa is new Discrete_Random(Integer);
  17.    generuj : Losowa.Generator;
  18.  
  19.    -- zadania
  20.    task Producent;
  21.    task Konsumenci;
  22.    task Salon is
  23.       entry Dostawa (nowe: in produkcja);
  24.       entry Zakup (wybor: in Integer; nowy: out Samochod);
  25.    end Salon;
  26.  
  27.    task body Producent is
  28.       nowe : produkcja;
  29.    begin
  30.       loop
  31.          nowe(1):=(bialy, sedan, 1.4);
  32.          nowe(2):=(czerwony, sedan, 1.6);
  33.          nowe(3):=(czarny, kombi, 1.6);
  34.          nowe(4):=(czerwony, kombi, 1.8);
  35.          delay 5.0;
  36.          Put_Line("PRODUCENT: Samochody wyprodukowano, czekaja na odbior");
  37.          Salon.Dostawa(nowe);
  38.       end loop;
  39.    end Producent;
  40.  
  41.    task body Konsumenci is
  42.       nowy  : Samochod;
  43.       wybor : Integer;
  44.    begin
  45.       loop
  46.          if (ilosc > Losowa.Random(generuj) mod 10) then   -- klient potrzebuje pewnej ilosci zeby wybrac
  47.             wybor := Losowa.Random(generuj) mod ilosc + 1; -- wybor symuluje losowanie
  48.             delay 2.0;
  49.             Put("KONSUMENT: Chce kupic samochod nr");
  50.             Put(wybor,3);
  51.             Put_Line("");
  52.             Salon.Zakup(wybor, nowy);
  53.          end if;
  54.       end loop;
  55.    end Konsumenci;
  56.  
  57.    task body Salon is
  58.    begin
  59.       loop
  60.          select
  61.             when ilosc > 0 =>  -- klient moze kupowac tylko jesli sa samochody
  62.                accept Zakup (wybor: in Integer; nowy: out Samochod) do
  63.                   nowy := WSalonie(wybor);
  64.                   WSalonie(wybor) := WSalonie (ilosc);
  65.                   ilosc := ilosc - 1;
  66.                   Put_Line("SALON    : Klient kupil samochod");
  67.                end Zakup;
  68.          or
  69.             when ilosc < 15 =>  -- salon przyjmuje dostawe tylko kiedy potrzebne sa nowe samochody
  70.                accept Dostawa (nowe: in produkcja) do
  71.                   for i in 1 .. 4 loop
  72.                      WSalonie(ilosc+i) := nowe (i);
  73.                   end loop;
  74.                   ilosc := ilosc + 4;
  75.                   Put_Line("SALON    : Dowieziono 4 samochody");
  76.                end Dostawa;
  77.          else  -- w wypadku, gdy zaden klient nie kupuje, producent nie produkuje
  78.             Put("SALON    : Bezczynny, mamy: ");
  79.             Put(ilosc,3);
  80.             Put_Line(" samochodow");
  81.             WypiszSamochody (WSalonie, ilosc);
  82.             delay 1.5;
  83.          end select;
  84.       end loop;
  85.    end Salon;
  86.  
  87. begin
  88.    Put("");
  89. end prod_kons;
Add Comment
Please, Sign In to add comment