|
|
zadach503.PAS |
|
{* Задача 503 *}Unit ZADACH503;Interface Implementation Begin writeln('На плоскости координатами своих вершин задан треугольник. Определить, к какому типу он принадлежит (остро- , тупо- или прямоугольный)'); End. Program zadach503; Const {* Константы *} eps = 10E - 5; { Поскольку в стандартной библиотеке Паскаля функция вычисления арккосинуса отсутствует, пишем ее самостоятельно ... } Function ArcCos(X : Double) : Double; Begin If abs(X) < eps Then arccos := Pi / 2 Else arccos := ArcTan(Sqrt(1 - Sqr(X)) / X) + Pi * Byte(X < 0); End; Type { Структура для хранения координат X, Y точки } Point = Record X, Y : double; End; Const { Переменная для хранения признака того, что один из углов треугольника - прямой ... } is90 : Boolean = False; { Процедура, запрашивающая у пользователя ввод координат X и Y определенной точки, и возвращающая эту точку через Var {* Объявление переменных *} - параметр... } Procedure GetCoord( Const {* Константы *} s : String; Var {* Необходимые переменные *} P : Point); Begin WriteLn('Point ' + s); Write('X = '); ReadLn(P.X); Write('Y = '); ReadLn(P.Y); End; { Функция для определения расстояния между двумя точками ... (Зачем нужен Var {* Объявление переменных *} Var {* В работе нам потребуются переменные: *} dist : Double; pA : Point); pB : Point); Begin dist := Sqrt(Sqr(pA.X - pB.X) + Sqr(pA.Y - pB.Y)); GetDist := dist; { Функция, возвращающая угол (в градусах !!!) между двумя сторонами треугольника, вычисленный из формулы теоремы косинусов } Function Angle(A : Double); B : Double); C : Double); Var {* Необходимые переменные *} value : Double; Begin Value := ArcCos((Sqr(A) + Sqr(B) - Sqr(C)) / (2 * A * B)) * (180 / Pi); If Abs(value - 90) < eps Then is90 := True; Angle := value; Var { Переменные для хранения вершин треугольника } pA : Point; pB : Point; pC : Point; { Длины сторон треугольника : A - длина стороны AB; B - длина стороны BC; C - длина стороны AC; } A : double; B : double; C : double; { Углы треугольника: alpha - угол между AC и BC (противолежит AB) beta - угол между AB и AC (противолежит BC) gamma - угол между AB и BC (противолежит AC) } alpha : double; beta : double; gamma : double; Begin { Получаем координаты вершин треугольника } GetCoord('A', pA); GetCoord('B', pB); GetCoord('C', pC); { Вычисляем все углы в заданном треугольнике } alpha := Angle( GetDist(B, pB, pC), GetDist(C, pA, pC), GetDist(A, pA, pB) ); beta := Angle(A, C, B); gamma := Angle(A, B, C); { И по вычисленным углам делаем вывод о том, является ли данный треугольник остро- , тупо- или прямоугольным } If is90 Then WriteLn('Прямоугольный') Else If (alpha < 90) And (beta < 90) And (gamma < 90) Then WriteLn('Остроугольный') Else If (alpha > 90) Or (beta > 90) Or (gamma > 90) Then WriteLn('Тупоугольный') End.. 07.08.2014 - Breakpoint - точка остановки 07.08.2014 - Топ-10 самых популярных приложений в Facebook 18.11.2013 - Панель управления и персонализация системы. Windows Vista 18.11.2013 - Логические и физические диски. Windows Vista 18.11.2013 - Удаление файлов и папок 01.11.2013 - Программирование дисковых подсистем: возможности 31.10.2013 - Windows8 или Windows7? 31.10.2013 - Windows8, игры |
|
Non-commercial fansite
|