Ну вот, как-то так. Только уж извините - с координатной сеткой возиться не стал. Очень много мороки.
Код:
Uses Graph, CRT;
Var
x1,x2,x3,y1,y2,y3,x,y,a,b,c,c1,c2,c3:Real;
Sum:Integer;
Xmax,Ymax,Xmin,Ymin,Kx,Ky:Real;
Function ArcCos(z:Real):Real;
begin
if Round(z*10000000)=10000000 then ArcCos:=0 else
if Round(z*10000000)=-10000000 then ArcCos:=Pi else
ArcCos:=(Pi/2)-ArcTan(z/SQRT(1-z*z));
end;
Function RadGr(t:Real):Real;
begin
RadGr:=(t/Pi)*180;
end;
Function Angle(d1,d2,d3:Real):Real;
begin
Angle:=ArcCos((Sqr(d1)+Sqr(d2)-Sqr(d3))/(d1*d2*2));
end;
Procedure Search_MinMax(v1,v2,v3,v4:real; var Vmin:real; var Vmax:real);
begin
Vmin:=v1;
if v2<Vmin then Vmin:=v2;
if v3<Vmin then Vmin:=v3;
if v4<Vmin then Vmin:=v4;
Vmax:=v1;
if v2>Vmax then Vmax:=v2;
if v3>Vmax then Vmax:=v3;
if v4>Vmax then Vmax:=v4;
end;
Begin
Write('x1 = ');
Readln(x1);
Write('y1 = ');
Readln(y1);
Write('x2 = ');
Readln(x2);
Write('y2 = ');
Readln(y2);
Write('x3 = ');
Readln(x3);
Write('y3 = ');
Readln(y3);
a:=Sqrt(Sqr(x2-x3)+Sqr(y2-y3));
b:=Sqrt(Sqr(x1-x3)+Sqr(y1-y3));
c:=Sqrt(Sqr(x1-x2)+Sqr(y1-y2));
Writeln('Point:');
Write('x = ');
Readln(x);
Write('y = ');
Readln(y);
Writeln;
c1:=Sqrt(Sqr(x-x1)+Sqr(y-y1));
c2:=Sqrt(Sqr(x-x2)+Sqr(y-y2));
c3:=Sqrt(Sqr(x-x3)+Sqr(y-y3));
Sum:=Round(RadGr(Angle(c1,c2,c)+Angle(c2,c3,a)+Angle(c1,c3,b)));
Writeln(Sum=360);
Writeln('Press "Enter" to show the picture...');
Readln;
Search_MinMax(x1,x2,x3,x,Xmin,Xmax);
Search_MinMax(y1,y2,y3,y,Ymin,Ymax);
InitGraph(...); {ТУТ УЖ ВЫ САМИ}
Kx:=0.8*GetMaxX/(Xmax-Xmin);
Ky:=0.8*GetMaxY/(Ymax-Ymin);
SetLineStyle(SolidLn,0,ThickWidth);
MoveTo(Round(0.1*GetMaxX+(x1-Xmin)*Kx),Round(0.9*GetMaxY-(y1-Ymin)*Ky));
LineTo(Round(0.1*GetMaxX+(x2-Xmin)*Kx),Round(0.9*GetMaxY-(y2-Ymin)*Ky));
LineTo(Round(0.1*GetMaxX+(x3-Xmin)*Kx),Round(0.9*GetMaxY-(y3-Ymin)*Ky));
LineTo(Round(0.1*GetMaxX+(x1-Xmin)*Kx),Round(0.9*GetMaxY-(y1-Ymin)*Ky));
Circle(Round(0.1*GetMaxX+(x-Xmin)*Kx),Round(0.9*GetMaxY-(y-Ymin)*Ky),2);
ReadKey;
CloseGraph;
End.