procedure GetPoint(c:char; var A:Point); var x,y:real; begin Write('Введите координаты x и y точки ',c,': '); Read(x,y); A.x:=x; A.y:=y end;
function DistPoint(A,B:Point):real; begin DistPoint:=sqrt(sqr(B.x-A.x)+sqr(B.y-A.y)) end;
var A,B,M:Point; d,p,ab,ma,mb:real; begin GetPoint('A',A); GetPoint('B',B); GetPoint('M',M); ab:=DistPoint(A,B); ma:=DistPoint(M,A); mb:=DistPoint(M,B); if ma>=ab+mb then d:=mb else if mb>=ma+ab then d:=ma else begin p:=(ma+mb+ab)/2; d:=2*sqrt(p*(p-ab)*(p-ma)*(p-mb))/ab end; Writeln('Минимальное расстояние составляет ',d) end.
Тестовое решение: Введите координаты x и y точки A: -3 -5 Введите координаты x и y точки B: 2 5 Введите координаты x и y точки M: -3 4 Минимальное расстояние составляет 4.02492235949962
const n=5; var a:array[1..n,1..n] of integer; x:array[1..n] of double; i,j,k:byte; begin Randomize; Writeln('*** Исходный массив ***'); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=Random(51)-25; Write(a[i,j]:4) end; Writeln end; Writeln('*** Массив x ***'); for j:=1 to n do begin x[j]:=0; k:=0; for i:=1 to n do if a[i,j] mod 2=0 then begin x[j]:=x[j]+a[i,j]; Inc(k) end; if k>0 then x[j]:=x[j]/k; Write(x[j]:0:5,' ') end; Writeln end.
Point=record
x,y:real
end;
procedure GetPoint(c:char; var A:Point);
var
x,y:real;
begin
Write('Введите координаты x и y точки ',c,': ');
Read(x,y);
A.x:=x; A.y:=y
end;
function DistPoint(A,B:Point):real;
begin
DistPoint:=sqrt(sqr(B.x-A.x)+sqr(B.y-A.y))
end;
var
A,B,M:Point;
d,p,ab,ma,mb:real;
begin
GetPoint('A',A); GetPoint('B',B); GetPoint('M',M);
ab:=DistPoint(A,B); ma:=DistPoint(M,A); mb:=DistPoint(M,B);
if ma>=ab+mb then d:=mb
else
if mb>=ma+ab then d:=ma
else begin
p:=(ma+mb+ab)/2;
d:=2*sqrt(p*(p-ab)*(p-ma)*(p-mb))/ab
end;
Writeln('Минимальное расстояние составляет ',d)
end.
Тестовое решение:
Введите координаты x и y точки A: -3 -5
Введите координаты x и y точки B: 2 5
Введите координаты x и y точки M: -3 4
Минимальное расстояние составляет 4.02492235949962
const
n=5;
var
a:array[1..n,1..n] of integer;
x:array[1..n] of double;
i,j,k:byte;
begin
Randomize;
Writeln('*** Исходный массив ***');
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:=Random(51)-25;
Write(a[i,j]:4)
end;
Writeln
end;
Writeln('*** Массив x ***');
for j:=1 to n do begin
x[j]:=0; k:=0;
for i:=1 to n do
if a[i,j] mod 2=0 then begin
x[j]:=x[j]+a[i,j]; Inc(k)
end;
if k>0 then x[j]:=x[j]/k;
Write(x[j]:0:5,' ')
end;
Writeln
end.
Тестовое решение:
*** Исходный массив ***
-10 18 -8 -15 5
-21 -18 6 -2 9
-7 22 -4 3 14
21 16 -10 -18 -9
17 3 -14 -18 12
*** Массив x ***
-10.00000 9.50000 -6.00000 -12.66667 13.00000