1. Современное решение (быстро, просто и легко) // PascalABC.NET 3.2, сборка 1439 от 09.05.2017 // Внимание! Если программа не работает, обновите версию!
begin Writeln('Ср.арифм: ',ReadSeqRealWhile(k->k>=0).Average:0:4) end.
Пример 23 11.7 0 12.9 16.7 13 -12 Ср.арифм: 12.8833
2. Школьный вариант в стиле "1983г." (Turbo Pascal 7.0)
uses Crt; var n:integer; x,a:real; begin a:=0; n:=0; repeat Read(x); if x>=0 then begin n:=n+1; a:=a+x end until x<0; a:=a/n; Writeln('Ср.арифм: ',a:0:4); ReadKey end.
begin
Otr := sqrt(sqr(Ax - Bx) + sqr(Ay - By))
end;
function Perim(Ax, Ay, Bx, By, Cx, Cy: real): real;
begin
Perim := Otr(Ax, Ay, Bx, By) + Otr(Bx, By, Cx, Cy) + Otr(aX, aY, Cx, Cy);
end;
function Area(Ax, Ay, Bx, By, Cx, Cy: real): real;
var
pp: real;
begin
pp := Perim(Ax, Ay, Bx, By, Cx, Cy) / 2;
Area := sqrt(pp * (pp - Otr(Ax, Ay, Bx, By)) * (pp - Otr(Bx, By, Cx, Cy)) *
(pp - Otr(Ax, Ay, Cx, Cy)))
end;
procedure Dist(Px, Py, Ax, Ay, Bx, By: real; var D: real);
begin
D := 2 * Area(Px, Py, Ax, Ay, Bx, By) / Otr(Ax, Ay, Bx, By)
end;
var
Px, Py, Ax, Ay, Bx, By, Cx, Cy: real;
d: real;
begin
writeln('Вводите координаты точкек парами чисел: ');
write('P-> ');
readln(Px, Py);
write('A-> ');
readln(Ax, Ay);
write('B-> ');
readln(Bx, By);
write('C-> ');
readln(Cx, Cy);
writeln;
Dist(Px, Py, Ax, Ay, Bx, By, d);
writeln('Расстояние от Р до АВ равно ', d);
Dist(Px, Py, Cx, Cy, Bx, By, d);
writeln('Расстояние от Р до ВC равно ', d);
Dist(Px, Py, Ax, Ay, Cx, Cy, d);
writeln('Расстояние от Р до АC равно ', d)
end.
Тестовое решение:
Вводите координаты точкек парами чисел:
P-> -3 6
A-> 5 8
B-> 9 -4
C-> 8 -2.5
Расстояние от Р до АВ равно 8.22192191643778
Расстояние от Р до ВC равно 4.43760156980184
Расстояние от Р до АC равно 8.24163383692135