Problem trwałych małżeństw.

0

Witam. W książce pt. "Algorytmy+struktury danych = programy" znalazłem kod rozwiązujący problem trwałych małżeństw. Chciałem go skompilować we Free Pascalu, jednak kompilator wywala error 201. Jeśli komuś się trochę nudzi, bardzo bym prosił o sprawdzenie poniższego kodu:

const n=8;

type
 mezczyzna = 1..n;
 kobieta = 1..n;
 pozycja = 1..n;

var
 m:mezczyzna;
 k:kobieta;
 p:pozycja;
 kmp:array [mezczyzna,pozycja] of kobieta;
 mkp:array [kobieta,pozycja] of mezczyzna;
 pmk:array [mezczyzna, kobieta] of pozycja;
 pkm:array [kobieta,mezczyzna] of pozycja;
 x:array [mezczyzna] of kobieta;
 y:array [kobieta] of mezczyzna;
 panna:array [kobieta] of boolean;

procedure drukuj;
var
 m:mezczyzna;
 pm,pk:integer;
begin
 pm:=0;
 pk:=0;
 for m:=1 to n do begin
        write(x[m]:4);
        pm:=pm+pmk[m,x[m]];
        pk:=pk+pkm[x[m],m];
 end;
 writeln(pm:8,pk:4);
 end;



procedure probuj(m:mezczyzna);
var
 p:pozycja;
 k:kobieta;
function trwale:boolean;
var
 t:boolean;
 i,lim:pozycja;
 pm:mezczyzna;
 pk:kobieta;
begin
 t:=true;
 i:=1;
 while (i<p) or t do
 begin
  pk:=kmp[m,i];
  i:=i+1;
  if not panna[pk] then t:=pkm[pk,m]<pkm[pk,y[pk]];
 end;
 i:=1;
 lim:=pkm[k,m];
 while (i<lim) or t do
 begin
  pm:=mkp[k,i];
  i:=i+1;
  if pm<m then t:=pmk[pm,k]>pmk[pm,x[pm]];
 end;
 trwale:=t;
end;

begin
 for p:=1 to n do
 begin
  k:=kmp[m,p];
  if panna[k] then
   if trwale then
    begin
        x[m]:=k;
        y[k]:=m;
        panna[k]:=false;
        if m<n then probuj(succ(m)) else drukuj;
        panna[k]:=true;
    end;
  end;
end;

begin
 for m:=1 to n do
  for p:=1 to n do
  begin
   read(kmp[m,p]);
   pmk[m,kmp[m,p]]:=p;
   end;
 for k:=1 to n do
  for p:=1 to n do
  begin
   read(mkp[k,p]);
   pkm[k,mkp[k,p]]:=p;
  end;
 for k:=1 to n do panna[k]:=true;
 probuj(1);
 readln;
end. 
0

jednak kompilator wywala error 201.

Rozróżniaj kompilator od debuggera i podaj Call Stack itp.

0

a co ma program robić? po uruchomieniu czeka na jakieś dane... jakie?

0

Tak jak w temacie, program ma znaleźć najbardziej optymalne pary. Zawiera informacje o 8 mężczyznach i 8 kobietach. Dane, które wymaga to preferencje konkretnej osoby, zaczynając od pierwszego mężczyzny. Czyli np. mężczyzna nr 1 preferuje kobiety w kolejności: 8-1-2-3-4-7-6-5 itd. dla każdej osoby. Wygodniej to sprawdzać dla n=4. Próbowałem to jeszcze skompilować pod Linuxem, tam zamiast błędu, po podaniu danych program kończy swoje działanie.

0

Próbowałem to jeszcze skompilować pod Linuxem, tam zamiast błędu, po podaniu danych program kończy swoje działanie.

Weź poczytaj o debuggerze zamiast pierniczyć, ok? Mówiłem: Call stack.

1 użytkowników online, w tym zalogowanych: 0, gości: 1