Создание класса "Треугольник" - 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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д