program s35ell; {$APPTYPE CONSOLE} uses SysUtils; const n = 100; var P : array [1..2] of array [1..n] of record X,Y : Integer end; // a pontok ket tablazata psz : array [1..2] of Integer; // a pontok szama procedure Olvas( i : Integer); // a pontok beolvasasa var be : Text; begin psz[i] := 0; Assign( be,ParamStr(i) ); ReSet( be ); while not eof(be) do begin Inc( psz[i] ); ReadLn( be, P[i][psz[i]].x, P[i][psz[i]].y ); end; Close( be ); end; var hsz : array [1..n] of Integer; // hova huzhato szakasz procedure Szakaszok; // megnezzuk, hogy mindegyik pontba huzhato-e szakasz var i,j,k,jo,tal : Integer; begin for i := 1 to psz[1] do hsz[i] := 0; // meg sehova sem huztunk for i := 1 to psz[1] do // az osszes eredeti ponthoz begin j := 1; tal := 0; // meg nem talaltuk meg while (tal=0) and (j<=psz[2]) do // keresunk egy a halmazban levo pontot begin if (P[1][i].x=P[2][j].x) and (P[1][i].y=P[2][j].y) then jo := 1 // ha a pont eppen egy halmazbeli, akkor ok else begin k := 1; jo := 1; while (jo=1) and (k<=psz[1]) do begin if (k<>i) and not ((P[1][k].x=P[2][j].x) and (P[1][k].y=P[2][j].y)) then if // es az i-edik es j-edik koze esik a k-adik pont ( (P[1][i].x<=P[1][k].x) and (P[1][k].x<=P[2][j].x) and (P[1][i].y<=P[1][k].y) and (P[1][k].y<=P[2][j].y) or (P[2][j].x<=P[1][k].x) and (P[1][k].x<=P[1][i].x) and (P[2][j].y<=P[1][k].y) and (P[1][k].y<=P[1][i].y) ) and ( (P[1][k].y-P[1][i].y)*(P[1][k].x-P[2][j].x) = (P[1][k].y-P[2][j].y)*(P[1][k].x-P[1][i].x) ) then jo := 0 // talaltunk kozejuk eso pontot else Inc(k) else Inc(k) end; end; if jo=1 then tal:=1 else Inc(j); // megvan, vagy keresunk tovabb end; if tal=1 then begin hsz[i] := 1; WriteLn( P[1][i].x,' ', P[1][i].y, ' <- ', P[2][j].x,' ', P[2][j].y ); end; end; end; procedure Kiir; var i : Integer; begin WriteLn( 'Nem huzhato szakasz ezekbe a pontokba:' ); for i := 1 to psz[1] do if hsz[i]=0 then WriteLn( P[1][i].x,' ', P[1][i].y ); end; begin Olvas(1); Olvas(2); Szakaszok; Kiir; ReadLn; end.