Listing GRANICER.PAS
Program Graniceri;
const maxn=1000;
type date=record
timp:Integer;
sens:string[2];
nume:string[40]
end;
var i,j,n,m,buc:Integer; c,orice:Char;
f:array [1..9] of Text;
exista:Boolean; g,h:Text;
trece:array [1..9] of date;
trecut:array [1..maxn] of date;
Function mai_exista_date:Boolean;
var i:Integer;
begin
i:=1;
while (i<=n) and (trece[i].timp=1000)
do i:=i+1;
mai_exista_date:=(i<=n)
end;
Procedure cu_data_cea_mai_mica
(var i:Integer; n:Integer);
var j:Integer;
begin
i:=1;
for j:=2 to n do
if trece[i].timp>trece[j].timp then i:=j
end;
Procedure caut_data_prec(i,buc:Integer;
var exista:Boolean; var j:Integer);
begin
j:=1;
while (j<=buc)
and (trece[i].nume<>trecut[j].nume)
do j:=j+1;
exista:=j<=buc
end;
Begin
Write('Cate puncte de frontiera exista?');
Readln(n); Writeln;
c:='1';
for i:=1 to n do
begin
Assign(f[i],'VAMA.IN'+c);
Reset(f[i]);
if Eof(f[i])
then trece[i].timp:=1000
else
with trece[i] do
Readln(f[i],timp,orice,
sens,orice,nume);
c:=Succ(c)
end;
Assign(g,'AFARA.OUT'); Rewrite(g);
Assign(h,'FRAUDE.OUT'); Rewrite(h);
buc:=0;
while mai_exista_date do
begin
cu_data_cea_mai_mica(i,n);
caut_data_prec(i,buc,exista,j);
if exista
then
if trece[i].sens=trecut[j].sens
then Writeln(h,trece[i].nume)
else trecut[j]:=trece[i]
else
begin
buc:=buc+1;
trecut[buc]:=trece[i]
end;
if Eof(f[i])
then trece[i].timp:=1000
else
with trece[i] do Readln(f[i],timp,orice,
sens,orice,nume)
end;
for i:=1 to buc do
if trecut[i].sens='OU'
then Writeln(g,trecut[i].nume);
Close(g);
Close(h);
for i:=1 to n do Close(f[i])
End.