⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trg_lib.pas

📁 PASCAL光盘资料PASCAL光盘资料PASCAL光盘资料
💻 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 + -