Next:2.4.5
Упражнения Up:2.4
Построение линейных программ
Previous:2.4.3
Возведение в степ
Решение. Пусть
-- координаты вершин. По формуле Герона площадь треугольника равна
где p
-- полупериметр треугольника,
длины сторон треугольника, а
Длина
--
длина отрезка прямой, соединяющего точки с координатами
и .
С использованием определяемых функций это решение запишется так:
module Герон;
var X1,Y1,X2,Y2,X3,Y3 : real;
procedure Длина(X,Y,Z,U : real):real;
begin return Sqrt(Sqr(Z-X)
+ Sqr(U-Y)) end Длина;
procedure A : real;
begin return Длина(Х1,Y1,X2,Y2)
end
A;
procedure B : real;
begin return
Длина(X2,Y2,X3,Y3) end B;
procedure C : real;
begin return
Длина(X3,Y3,X1,Y1) end C;
procedure P : real;
begin return
(A+B+C)/2 end P;
begin
read(X1,Y1,X2,Y2,X3,Y3);
writeln('Площадь равна',
Sqrt(P
(P-A)
(P-B)
(P-C)))
end Герон.
В этой программе ровно четыре вызова функции Длина, т.е. четыре раза по одной и той же формуле с неизменными аргументами вычисляется полупериметр треугольника. Более разумным было бы вычислить полупериметр один раз, запомнить во вспомогательной переменной и затем использовать его столько раз, сколько понадобится. Аналогичное можно сказать и о функциях A, B, C, P для вычисления длин сторон. После такого преобразования получим
module Герон1;
var X1,Y1,X2,Y2,X3,Y3,A,B,C,P : real;
procedure Длина (X,Y,Z,U : real):real;
begin return
Sqrt(Sqr(Z-X) + Sqr(U-Y)) end Длина;
begin
read(X1,Y1,X2,Y2,X3,Y3);
A := Длина (X1,Y1,X2,Y2);
B := Длина (X2,Y2,X3,Y3);
C := Длина (X3,Y3,X1,Y1);
P := (A+B+C)/2;
writeln ('Площадь равна',Sqrt(P
(P-A)
(P-B)
(P-C)))
end Герон1.
Next:2.4.5
Упражнения Up:2.4
Построение линейных программ
Previous:2.4.3
Возведение в степ