with ada.text_io, ada.numerics.discrete_random;
use ada.text_io;
procedure golf is
subtype RandIntervall is integer range 1..10;
package Rand is new ada.numerics.discrete_random(RandIntervall);
use Rand;
protected W is
procedure Write(s : in string);
end W;
protected body W is
procedure Write(s : in string) is
begin
put_line(s);
end Write;
end W;
protected type Palya is
entry belep;
procedure kilep;
private
b : boolean := true;
end Palya;
protected body Palya is
entry belep when b is
begin
b := false;
end belep;
procedure kilep is
begin
b := true;
end kilep;
end Palya;
Palyak : array(1..18) of Palya;
task type Csoport(id : integer);
task Penztar is
entry fizet;
entry elkoszon(x : in integer);
end Penztar;
task body Csoport is
faildb : integer := 0;
G : Generator;
begin
reset(G);
W.Write(integer'image(id) & ". csoport: fizetek");
Penztar.fizet;
for i in 1..18 loop
select
Palyak(i).belep;
delay duration((random(G)+10)/100);
W.Write(integer'image(id) & ". csoport: jatszottam a " & integer'image(i) & ". palyan");
Palyak(i).kilep;
or
delay 0.15;
W.Write(integer'image(id) & ". csoport: rauntam varni a " & integer'image(i) & ". palyara");
faildb := faildb + 1;
end select;
end loop;
W.Write(integer'image(id) & ". csoport: befejeztem a jatekot es " & integer'image(faildb*100) & ". fabatkat kaptam vissza");
Penztar.elkoszon(faildb);
end Csoport;
task body Penztar is
db : integer := 0;
back : integer := 0;
cash : integer := 0;
begin
while db < 30 loop
select
accept fizet do
cash := cash + 1800;
end fizet;
or
accept elkoszon(x : in integer) do
db := db + 1;
back := back + x;
end elkoszon;
end select;
end loop;
W.Write("Penztar: A napi bevetel: " & integer'image(cash - 100*back));
end Penztar;
type pCsoport is access Csoport;
Cs : array(1..30) of pCsoport;
G : Generator;
begin
Reset(G);
for i in 1..30 loop
delay duration((random(G)+20)/100);
Cs(i) := new Csoport(i);
end loop;
end golf;
VISSZA