Function p(x,y:real):real;
begin
p:=sqrt(sqr(x)+sqr(y))
end;
function fi(x,y:real):real;
begin
fi:=arctan(y/x)
end;
function f(x1,y1,x2,y2:real):real;
var
p1,p2,fi1,fi2:real;
begin
p1:=p(x1,y1); p2:=p(x2,y2);
fi1:=fi(x1,y1); fi2:=fi(x2,y2);
f:=sqrt(sqr(p1)+sqr(p2)-2*p1*p2*cos(fi2-fi1));
end;
var
ax,ay,bx,by,cx,cy,dx,dy:real;
begin
ax:=2; ay:=5;
bx:=2; by:=1;
cx:=20; cy:=4;
dx:=12; dy:=8;
Writeln('f(a,b)=',f(ax,ay,bx,by):0:3);
Writeln('f(c,d)=',f(cx,cy,dx,dy):0:3)
end.
Результат выполнения программы:
f(a,b)=4.000
f(c,d)=8.944
Более "красивое" решение с пользовательским типом данных.
type
Point=record
x,y:real
end;
function p(A:Point):real;
begin
p:=sqrt(sqr(A.x)+sqr(A.y))
end;
function fi(A:Point):real;
begin
fi:=arctan(A.y/A.x)
end;
function f(A,B:Point):real;
var
p1,p2,fi1,fi2:real;
begin
p1:=p(A); fi1:=fi(A);
p2:=p(B); fi2:=fi(B);
f:=sqrt(sqr(p1)+sqr(p2)-2*p1*p2*cos(fi2-fi1));
end;
var
A,B,C,D:Point;
begin
A.x:=2; A.y:=5;
B.x:=2; B.y:=1;
C.x:=20; C.y:=4;
D.x:=12; D.y:=8;
Writeln('f(A,B)=',f(A,B):0:3);
Writeln('f(C,D)=',f(C,D):0:3)
end.