Создание класса "Треугольник" - 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;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы