Param70. Используя типы TPoint, TTriangle и функцию Area (см. задания Param64-Param66), описать функцию AreaN($$P$$, $$N$$) вещественного типа, находящую площадь выпуклого N-угольника, вершины которого (в порядке их обхода) передаются в массиве $$p$$ размера $$N$$ $$(>2)$$ с элементами типа TPoint. С помощью этой функции найти площади трех многоугольников, если дано число их сторон и координаты их вершин.
Решение:
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 |
program Param70; type TPoint = record x,y:real; end; TTriangle = record A,B,C:TPoint; end; TArrayPoint = array[1..10] of TPoint; var P:TArrayPoint; N,i:integer; 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 AreaN(P:TArrayPoint;N:integer):real; var i:integer; TempT:TTriangle; begin result:=0; TempT.A:=P[1]; for i:=2 to N-1 do begin TempT.B:=P[i]; TempT.C:=P[i+1]; result:=result+Area(TempT); end; end; begin Write('N: '); Readln(N); For i:=1 to N do begin Write(i,': '); Readln(P[i].x,P[i].y); end; Writeln(AreaN(P,N)); end. |
Другие задачи из раздела Param можно посмотреть здесь.
Комментарии:
Комментарии 1