with Text_IO;use Text_IO; procedure bank is package Int_IO is new Integer_IO(Integer); AFRAGIA:exception; protected type Logariasmos(kod:integer) is function ervthsh return Integer; procedure analhch(poso:Integer;yp:out Integer); procedure katauesh(poso:Integer;yp:out Integer); procedure metafora(poso:Integer;log:Integer;yp1:out Integer;yp2:out Integer); private ypol:Integer:=100_000*(2+kod)/2; kodikos:Integer:=kod; end Logariasmos; type alog is access Logariasmos; logmat:array(1..16) of alog; task type termatiko(lab:access String;rand:Integer) ; task semaphore is entry P; entry V; end semaphore; task body semaphore is begin loop accept P; accept V; end loop; end; use Int_IO; procedure Echo(l,pr:String; logar,poson,ypoloipo:Integer) is begin Put(l); Put(": "); Put(pr); Put("logariasmo:"); Put(logar,0); Put(" - "); Put(poson,0); Put(" drx."); Put(" ypoloipo:"); Put(ypoloipo,0); New_Line; end Echo; use Int_IO; procedure Echo(l,pr: String; logar,ypoloipo:Integer) is begin Put(l); Put(": "); Put(pr); Put("logariasmo:"); Put(logar,0); Put(" ypoloipo:"); Put(ypoloipo,0);New_Line; end Echo; use Int_IO; procedure Echo(l,pr:String; logar,logar2,poson,ypoloipo,ypoloipo2:Integer) is begin Put(l); Put(": "); Put(pr); Put("apo to logariasmo:"); Put(logar,0); Put(" ston logariasmo:");Put(logar2,0);Put(" - "); Put(poson,0); Put(" drx."); Put(" ypoloipo 1:"); Put(ypoloipo,0); Put(" ypoloipo 2:"); Put(ypoloipo2,0);New_Line; end Echo; use Int_IO; procedure Echo(l:String;lo,po:Integer) is begin Put(l);Put(": ");Put("To ypoloipo sto logariasmo ");Put(lo,0); Put(" einai mikrotero apo "); Put(po,0);Put(" Den einai dynath h analhch");New_Line; end Echo; protected body Logariasmos is function ervthsh return Integer is begin return ypol; end ervthsh; procedure analhch(poso:Integer;yp:out Integer) is begin if ypol logmat(log).katauesh(poso,ypol); Echo(lab.all,"Katauesh ston ",log,poso,ypol); when ANA => logmat(log).analhch(poso,ypol); Echo(lab.all,"Analhch apo ton ",log,poso,ypol); when ERV => Echo(lab.all,"Ervthsh gia ton ",log,logmat(log).ervthsh); when MET => logmat(log).analhch(poso,ypol); logmat(log2).katauesh(poso,ypol2); Echo(lab.all,"Metafora ",log,log2,poso,ypol,ypol2); end case; semaphore.V; end loop; exception when AFRAGIA=> Echo(lab.all,log,poso);semaphore.V; end termatiko; type acterm is access termatiko; --exa:array (1..8) of acterm; type acstring is access String; exstr:array (1..8) of acstring; begin for index in 1..16 loop logmat(index):=new Logariasmos(index); end loop; for ijk in 1..8 loop exstr(ijk):=new String(1..11); end loop; exstr(1).all:="Antarhs "; exstr(2).all:="Persefonh "; exstr(3).all:="Ermhs "; exstr(4).all:="Kleonikh "; exstr(5).all:="Eykleidhs "; exstr(6).all:="Betelguese "; exstr(7).all:="Berenikh "; exstr(8).all:="Efelbina "; declare exa1:termatiko(exstr(1),3145); exa2:termatiko(exstr(2),1937); exa3:termatiko(exstr(3),4553); exa4:termatiko(exstr(4),937); exa5:termatiko(exstr(5),3752); exa6:termatiko(exstr(6),957); exa7:termatiko(exstr(7),431); exa8:termatiko(exstr(8),1587); begin Put("ENARJH"); end; abort semaphore; end bank ;