Создание класса "Треугольник" - C#
Формулировка задачи:
Создать класс треугольник, члены класса - координаты 3х точек. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре - длины сторон, углы, периметр, площадь. Создать производный класс - равносторонний треугольник, предусмотреть в классе проверку является ли треугольник равносторонним. Написать программу, демонстрирующую работу с классом: дано N треугольников и M равносторонних треугольников, вывести номера одинаковых треугольников и равносторонний треугольник с наименьшей медианой.
Решение задачи: «Создание класса "Треугольник"»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public class Triangle { internal class Point { public double X; public double Y; public Point(double x, double y) { X = x; Y = y; } public double GetSize() { return Math.Sqrt(Math.Pow(X, 2) + Math.Pow(Y, 2)); } } private Point[] verts = new Point[3]; private double[] _sizes = new double[3]; public Triangle(double ax, double ay, double bx, double by, double cx, double cy) { verts[0] = new Point(bx - ax, by - ay); verts[1] = new Point(cx - bx, cy - by); verts[2] = new Point(cx - ax, cy - ay); _sizes = verts.Select(x => x.GetSize()).ToArray(); } public double[] GetSideSizes() { return _sizes; } public double GetPerimeter() { return GetSideSizes().Sum(); } public double GetArea() { var sizes = GetSideSizes(); var p = GetPerimeter()/2d; return Math.Sqrt(p*sizes.Select(z=>p-z).Aggregate(1d, (x,y) => x*y)); } public bool Exists() { return _sizes[0] + _sizes[1] > _sizes[2] && _sizes[0] + _sizes[2] > _sizes[1] && _sizes[1] + _sizes[2] > _sizes[0]; } public double[] GetAngles() { var result = new double[3]; result[0] = Math.Acos( (Math.Pow(_sizes[1], 2) + Math.Pow(_sizes[2], 2) - Math.Pow(_sizes[0], 2))/(2*_sizes[1]*_sizes[2]) ); result[1] = Math.Acos( (Math.Pow(_sizes[0], 2) + Math.Pow(_sizes[2], 2) - Math.Pow(_sizes[1], 2)) / (2 * _sizes[0] * _sizes[2]) ); result[2] = Math.PI - result[0] - result[1]; return result; } } public class EquiliteralTriangle : Triangle { public EquiliteralTriangle(double ax, double ay, double bx, double by, double cx, double cy) : base(ax, ay, bx, by, cx, cy) { } public bool IsEquiLiteral() { var sizes = GetSideSizes(); return !sizes.Any(x => Math.Abs(x - sizes[0]) > 1e3); } public double GetMedian() { return GetSideSizes()[0] * Math.Sqrt(3) / 2; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д