Advertisement
Gocha02

Untitled

Jun 6th, 2022
1,371
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 2.70 KB | None | 0 0
  1. package body Rozwiazanie is --cialo pakietu zadeklarowanego w rozwiazanie.ads
  2.     task body SerwerSzkolen is --definicje i zmienne uzywane w programie
  3.         gdzieWstawicPracownika : Integer := 1;
  4.         dolaczeni : Integer := 0;
  5.         aktualnaLista : ListaUczestnikow; -- zrobienie listy pracownikow
  6.         resztaPracownikow : Integer := liczbaPracownikow mod rozmiarGrupy; --pozostali pracownicy
  7.         pracownicyPoSzkoleniu : Integer := 0;
  8.         czyKoniec : Boolean := false;
  9.     --rzeczywiste dzialanie programu
  10.     begin
  11.         loop
  12.             select
  13.                 when (gdzieWstawicPracownika <= rozmiarGrupy or gdzieWstawicPracownika <= resztaPracownikow) and liczbaPracownikow /= pracownicyPoSzkoleniu and czyKoniec = false =>  
  14.                 accept Zapisz(id : Integer) do
  15.                     aktualnaLista(gdzieWstawicPracownika) := id;
  16.                     gdzieWstawicPracownika := gdzieWstawicPracownika + 1;
  17.                     Put_Line ("Pracownik sie zapisuje. Jego nr to: "& Integer'Image (id));
  18.                 end;
  19.             or
  20.                 when czyKoniec = false and liczbaPracownikow /= pracownicyPoSzkoleniu and (gdzieWstawicPracownika > rozmiarGrupy or (gdzieWstawicPracownika > resztaPracownikow and pracownicyPoSzkoleniu = liczbaPracownikow - resztaPracownikow)) =>
  21.                 accept Dolacz(id: Integer; rozmiar: out Integer; uczestnicy: out ListaUczestnikow) do
  22.                     dolaczeni := dolaczeni + 1;
  23.                     uczestnicy := aktualnaLista;
  24.                     rozmiar := gdzieWstawicPracownika - 1;
  25.                     Put_Line ("Pracownik dolacza. Jego nr to: "& Integer'Image (id));
  26.                     if dolaczeni = rozmiarGrupy or (pracownicyPoSzkoleniu = (liczbaPracownikow - resztaPracownikow) and dolaczeni = resztaPracownikow) then
  27.                         czyKoniec := true;
  28.                         dolaczeni := 0;
  29.                         gdzieWstawicPracownika := 1;
  30.                     end if;
  31.                 end;
  32.             or
  33.                 when czyKoniec = true and liczbaPracownikow /= pracownicyPoSzkoleniu=>
  34.                 accept Opusc(id: Integer) do
  35.                     pracownicyPoSzkoleniu := pracownicyPoSzkoleniu + 1;
  36.                     Put_Line ("pracownik wychodzi: "& Integer'Image (id) & " pracownicy po szkoleniu: "& Integer'Image (pracownicyPoSzkoleniu));
  37.                     if pracownicyPoSzkoleniu mod rozmiarGrupy = 0 then
  38.                         czyKoniec := false;
  39.                     end if;
  40.                 end;
  41.             or when czyKoniec = true and pracownicyPoSzkoleniu = liczbaPracownikow =>
  42.                 terminate;
  43.             end select;
  44.         end loop;
  45.     end SerwerSzkolen;
  46. end Rozwiazanie;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement