Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 2 KB
PROGRAM bpont;
USES png, gd, baseunix, unix;
CONST
maxn = 1000;
TYPE
point = RECORD
x, y: LONGINT;
END;
VAR
N: LONGINT;
list: ARRAY [1..maxn] OF point;
FUNCTION min(a, b: LONGINT): LONGINT;
BEGIN
IF (a < b) THEN min:= a
ELSE min:= b;
END;
PROCEDURE GetFraction(id: LONGINT; VAR x1, y1, x2, y2: LONGINT);
BEGIN
x1:= list[id].x; y1:= list[id].y;
IF (id = N) THEN id:= 1
ELSE INC(id);
x2:= list[id].x; y2:= list[id].y;
END;
PROCEDURE dswap(VAR x1, y1, x2, y2: LONGINT);
VAR
tmp: LONGINT;
BEGIN
tmp:= x1; x1:= x2; x2:= tmp;
tmp:= y1; y1:= y2; y2:= tmp;
END;
FUNCTION Answer(x0, y0: LONGINT): BOOLEAN;
VAR
i: LONGINT;
cross, up, down: LONGINT;
x1, y1, x2, y2: LONGINT;
BEGIN
cross:= 0; up:= 0; down:= 0;
FOR i:= 1 TO N DO
BEGIN
GetFraction(i, x1, y1, x2, y2);
IF y1 < y2 THEN dswap(x1, y1, x2, y2);
IF (y1 > y0) AND (y2 < y0) THEN
BEGIN
IF (x1-x0)*(y1-y2)+(x2-x1)*(y1-y0) >= 0 THEN
BEGIN
INC(cross);
END;
END
ELSE IF (y1 = y0) AND (x1 >= x0) THEN
BEGIN
IF (y2 > y0) THEN INC(up)
ELSE IF (y2 < y0) THEN INC(down)
END
ELSE IF (y2 = y0) AND (x2 >= x0) THEN
BEGIN
IF (y1 > y0) THEN INC(up)
ELSE IF (y1 < y0) THEN INC(down)
END;
END;
cross:= cross+min(up, down);
Answer:= cross MOD 2 = 1;
END;
PROCEDURE Load(fname: STRING);
VAR
be: Text;
i: LONGINT;
BEGIN
Assign(be, fname);
Reset(be);
IF IOResult <> 0 THEN
BEGIN
WriteLn('A fajlt nem tudom megnyitni.');
HALT;
END;
ReadLn(be, N);
FOR i:= 1 TO N DO
BEGIN
ReadLn(be, list[i].x, list[i].y);
END;
Close(be);
END;
PROCEDURE Prompt;
VAR
x, y: LONGINT;
BEGIN
ReadLn(x, y);
WHILE (IOResult = 0) DO
BEGIN
IF Answer(x, y) THEN WriteLn('IGEN')
ELSE WriteLn('NEM');
ReadLn(x, y);
END;
END;
PROCEDURE Main;
BEGIN
IF ParamCount = 1 THEN
BEGIN
Load(ParamStr(1));
Prompt;
END
ELSE
BEGIN
WriteLn('Haszn: ');
WriteLn(ParamStr(0), ' bpont.be');
END;
END;
BEGIN
Main;
END.