Param68. Используя типы TPoint, TTriangle и функцию Dist (см. задания Param64, Param65, Param67), описать процедуру Heights($$T$$, $$h_1$$, $$h_2$$, $$h_3$$), находящую высоты $$h_1$$, $$h_2$$, $$h_3$$ треугольника $$T$$ ($$T$$ — входной параметр типа TTriangle, $$h_1$$, $$h_2$$, $$h_3$$ — выходные вещественные параметры), проведенные соответственно из вершин $$T.A$$, $$T.B$$, $$T.C$$. С помощью этой процедуры найти высоты треугольников $$ABC$$, $$ABD$$, $$ACD$$, если даны координаты точек $$A$$, $$B$$, $$C$$, $$D$$.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
program Param65; type TPoint = record x,y:real; end; TTriangle = record A,B,C:TPoint; end; var A,B,C,D:TPoint; ABC,ABD,ACD:TTriangle; h1,h2,h3:real; Function Leng(A,B:TPoint):real; begin Leng:=sqrt(sqr(A.X-B.X)+sqr(A.Y-B.Y)); end; Function Perim(T:TTriangle):real; begin Perim:=Leng(T.A,T.B)+Leng(T.B,T.C)+Leng(T.C,T.A); end; Function Area(T:TTriangle):real; begin Area:=sqrt((Perim(T)/2)*((Perim(T)/2)-Leng(T.A,T.B))*((Perim(T)/2)-Leng(T.A,T.C))*((Perim(T)/2)-Leng(T.B,T.C))); end; Function Dist(P,A,B:TPoint):real; var PAB:TTriangle; begin PAB.A:=P; PAB.B:=A; PAB.C:=B; Dist:=2*Area(PAB)/Leng(A,B); end; procedure Heights(T:TTriangle;var h1,h2,h3:real); begin h1:=Dist(T.A,T.B,T.C); h2:=Dist(T.B,T.A,T.C); h3:=Dist(T.C,T.A,T.B); end; begin Write('A(x,y): '); Readln(A.x,A.y); Write('B(x,y): '); Readln(B.x,B.y); Write('C(x,y): '); Readln(C.x,C.y); Write('D(x,y): '); Readln(D.x,D.y); ABC.A:=A; ABC.B:=B; ABC.C:=C; ABD.A:=A; ABD.B:=B; ABD.C:=D; ACD.A:=A; ACD.B:=C; ACD.C:=D; Heights(ABC,h1,h2,h3); Writeln(h1,' ',h2,' ',h3); Heights(ABD,h1,h2,h3); Writeln(h1,' ',h2,' ',h3); Heights(ACD,h1,h2,h3); Writeln(h1,' ',h2,' ',h3); end. |
Другие задачи из раздела Param можно посмотреть здесь.
Комментарии: