📄 trg_lib.pas
字号:
unit trg_lib;
interface
function Init : integer;
function Pitaj (grad1, grad2 : integer) : integer;
procedure Gotovo (put : array of integer);
implementation
const INFILE = 'trgovac.in';
OUTFILE = 'trgovac.out';
LOGFILE = 'trgovac.log';
MAXGRADOVA = 1000;
MAXPITANJA = 10000;
PREVISE_PITANJA = -1;
ILEGALNO_PITANJE = -2;
var broj_gradova : integer;
strelica : array[0..MAXGRADOVA, 0..MAXGRADOVA] of integer;
flog : text;
broj_pitanja : integer;
function Init : integer;
var fin : text;
i, j : integer;
begin
broj_pitanja:=0;
assign (flog, LOGFILE); rewrite (flog);
{$i-} assign (fin, INFILE); reset (fin); {$i+}
if (IoResult <> 0) then
begin
writeln (flog, 'Datoteka ', INFILE, ' ne postoji.');
close (flog);
halt(0);
end;
{ ucitavamo podatke iz trgovac.in }
{$i+} read (fin, broj_gradova); {$i-}
if (IoResult <> 0) then
begin
writeln (flog, 'Format datoteke ', INFILE, ' nije dobar.');
close (flog);
halt(0);
end;
for i:=0 to broj_gradova-1 do
for j:=i+1 to broj_gradova-1 do
begin
{$i+} read (fin, strelica[i, j]); {$i-}
if (IOResult <> 0) then
begin
writeln (flog, 'Format datoteke ', INFILE, ' nije dobar.');
close (flog);
halt(0);
end
else
strelica[i, j]:=strelica[i, j]-1;
strelica[j, i]:=strelica[i, j];
end;
close (fin);
Init:=broj_gradova;
end;
function Pitaj (grad1, grad2 : integer) : integer;
var fout : text;
begin
broj_pitanja:=broj_pitanja+1;
if (broj_pitanja > MAXPITANJA) then
begin
writeln (flog, 'Prevelik broj pitanja.');
close (flog);
assign (fout, OUTFILE); rewrite (fout);
writeln (fout, PREVISE_PITANJA);
close (fout);
halt(0);
end;
write (flog, 'Pitanje broj ', broj_pitanja, ': Pitaj(', grad1, ', ', grad2, ') --> ');
if (grad1=grad2) or (1>grad1) or (1>grad2) or (grad1>broj_gradova) or (grad2>broj_gradova) then
begin
assign (fout, OUTFILE); rewrite (fout);
writeln (flog, 'nedozvoljeno pitanje');
close (flog);
writeln (fout, ILEGALNO_PITANJE);
close (fout);
halt (0);
end
else
begin
writeln (flog, strelica[grad1-1][grad2-1]+1);
Pitaj:=strelica[grad1-1][grad2-1]+1; exit;
end;
end;
procedure Gotovo (put : array of integer);
var fout : text;
i : integer;
begin
writeln (flog, 'Ukupno postavljeno ', broj_pitanja, ' pitanja.');
close (flog);
assign (fout, OUTFILE); rewrite (fout);
writeln (fout, broj_pitanja);
{
pazi, ovdje je put indexiran od nula iako je pascal!!!!!
tu moze biti bad ako on ima raspored[0..N] a indexira od 1
ko normalan to radi?!
}
write (fout, put[0]);
for i:=1 to broj_gradova-1 do
write (fout, ' ', put[i]);
writeln (fout);
close (fout);
halt (0);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -