Основы программирования на C++, PASCAL
Описать для указанных фигур методы «вычисление углов» (в градусах), «вычисление диагоналей», «вычисление длин сторон», «вычисление периметра», «вычисление площади».
Type BaseType=Double;
FourAngle=Object
x1,y1,x2,y2,x3,y3,x4,y4,
A,B,C,D,D1,D2,
Alpha,Beta,Gamma,Delta,
P,S: BaseType;
Procedure Init;
Procedure Storony;
Procedure Diagonali;
Procedure Angles;
Procedure Perimetr;
Procedure Ploshad;
Procedure PrintElements;
End;
Parall=Object(FourAngie)
Procedure Storony;
Procedure Perimetr;
Procedure Ploshad;
End;
Romb=0bject(Parall)
Procedure Storony;
Procedure Perimetr;
End;
Kvadrat=0bject(Romb)
Procedure Angles;
Procedure Ploshad;
End;
Procedure FourAngie.Init;
Begin
Write ('Введите координаты вершин заданного четырехугольника:');
ReadLn(x1, y1, х2, у2, х3, у3, х4, у4);
End;
Procedure FourAngie.Storony;
Begin A:=Sqrt(Sqr(x2-xl)+Sqr(y2-yl));
B:=Sqrt(Sqr(x3-x2)+Sqr(y3-y2));
C:=Sqrt(Sqr(x4-x3)+Sqr(y4-y3));
D:=Sqrt(Sqr(x4-xl)+Sqr(y4-yl));
End;
Procedure FourAngle.Diagonali;
Begin
Dl:=Sqrt(Sqr(xl-x3)+Sqr(yl-y3));
D2:=Sqrt(Sqr(x2-x4)+Sqr(y2-y4));
End;
Procedure FourAngle.Angles;
Function Ugol(Aa,Bb,Cc: BaseType):
BaseType;
Var VspCos, VspSin: BaseType;
Begin
VspCos:=(Sqr(Aa)+Sqr(Bb)-Sqr(Cc))/(2*Aa*Bb);
VspSin:=Sqrt(1-Sqr(VspCos));
If Abs(VspCos)>le-7
Then Ugol:=(ArcTan(VspSin/VspCos) +Pi*Ord(VspCos<0))/Pi*180
Else Ugol:=90
End;
Begin Alpha:=Ugol(D,A,D2);Beta:=Ugol(A,B,Dl);Gamina:=Ugol(B,C,D2); Delta: =Ugol (C,D, Dl);
End;
Procedure FourAngle.Perimetr;
Begin P:=A+B+C+D End;
Procedure FourAngle.Ploshad;
Var Peri, Per2: BaseType;
Begin Perl:=(A+D+D2)/2; Per2:=(B+C+D1)/2;
S:=Sqrt(Perl*(Perl-A)*(Perl-D)*(Perl-D2)) + Sqrt(Per2*(Per2-B)*(Per2-C)*(Per2-Dl))
End;
Procedure FourAngle.PrintElements;
Begin
WriteLn('Стороны:',A:10:6,В:10:6,С:10:6,D:10:6,'Углы:',Alpha:10:4,Beta:10:4,Gamma:10:4,Delta:10:4,'Периметр:',Р:10:6,'Площадь:',S:10:6,'Диагонали:', D1:10:6,D2:10:6)
End;
Procedure Parall.Storony;
Begin A:=Sqrt(Sqr(x2-xl)+Sqr(y2-yl));
B:=Sqrt(Sqr(x3-x2)+Sqr(y3-y2)) ;
C:=A; D:=B
End;
Procedure Parall.Perimetr;
Begin P:=2*(A+B) End;
Procedure Parall.Ploshad;
Var Per: BaseType;
Begin Per:=(A+D+D2)/2;
S:=2*Sqrt(Per*(Per-A)*(Per-D)*(Per-D2))
End ;
Procedure Romb.Storony;
Begin
A:=Sqrt(Sqr(x2-xl)+Sqr(y2-yl));
B:=A; C:=A; D:=A
End;
Procedure Romb.Perimetr ;
Begin P:=2*A End;
Procedure Kvadrat.Angles;
Begin Alpha:=90; Beta:=90; Gamma:=90; Delta:=90;
End;
Procedure Kvadrat.Ploshad;
Begin S:=Sqr(A)
End;
{Основная программа}
Var obj: Kvadrat ;
Begin
obj.Init;
obj.Storony;
obj.Diagonali;
obj.Angles;
obj.Perimetr;
obj.Ploshad;
obj.PrintElements
End.
Таким образом, вычисление соответствующего элемента в фигуре, если это действие по сравнению с другими является уникальным, производится обращением к своему методу.