Sun Sep 02, 2012 6:59 pm
Gunny->Rock - Code:
const fi='bt.inp';fo='bt.out';
type diem=record x,y:integer;end;
dt=record a,b,c:integer;end;
dg=array[0..100]of diem;
var p:dg;
n,minx,maxx,miny,maxy:integer;
E,F:diem;
g:text;
procedure doc;
var i:integer;
begin
assign(g,fi);reset(g);
n:=4;
for i:=1 to n do readln(g,p[i].x,p[i].y);
readln(g,E.x,E.y);
readln(g,F.x,F.y);
close(g);
end;
procedure khoitao;
var i:integer;
begin
assign(g,fo);rewrite(g);
maxx:=p[1].x;
minx:=p[1].x;
maxy:=p[1].y;
miny:=p[1].y;
for i:=2 to n do
begin
if maxx<p[i].x then maxx:=p[i].x;
if minx>p[i].x then minx:=p[i].x;
if maxy<p[i].y then maxy:=p[i].y;
if miny>p[i].y then miny:=p[i].y;
end;
end;
function kt(M:diem):boolean;
begin
kt:=(M.x>=minx)and(M.x<=maxx)and(M.y>=miny)and(M.y<=maxy);
end;
function gt(M:diem;T:dt):integer;
begin
gt:=T.a*M.x+T.b*M.y+T.c;
end;
procedure xddt(A,B:diem;var T:dt);
begin
t.a:=A.y-B.y;
t.b:=B.x-A.x;
t.c:=A.x*B.y-A.y*B.x;
end;
function khacphia(A,B:diem;T:dt):boolean;
begin
khacphia:=(GT(A,T)*GT(B,T)<0);
end;
procedure ghi;
var dem,i:integer;T,T1:dt;
begin
dem:=0;
if kt(E)and kt(F) then writeln(g,'EF nam trong hcn')
else
if kt(E) and not kt(F) then writeln(g,'Diem E thuoc hcn va Diem F ko thuoc hcn')
else
if kt(F) and not kt(E) then writeln(g,'Diem F thuoc hcn va Diem E ko thuoc hcn')
else
begin
p[n+1]:=p[1];
xddt(E,F,T);
for i:=1 to n do
begin
xddt(p[i],p[i+1],T1);
if khacphia(E,F,T1)and khacphia(p[i],p[i+1],T) then inc(dem);
end;
if dem>0 then write(g,'Doan EF co diem chung voi hcn')
else write(g,'Doan EF khong co diem chung voi hcn');
end;
close(g);
end;
BEGIN
doc;
khoitao;
ghi;
END.