Создание класса "Треугольник" - C#

Узнай цену своей работы

Формулировка задачи:

Создать класс треугольник, члены класса - координаты 3х точек. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре - длины сторон, углы, периметр, площадь. Создать производный класс - равносторонний треугольник, предусмотреть в классе проверку является ли треугольник равносторонним. Написать программу, демонстрирующую работу с классом: дано N треугольников и M равносторонних треугольников, вывести номера одинаковых треугольников и равносторонний треугольник с наименьшей медианой.

Решение задачи: «Создание класса "Треугольник"»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ConsoleApplication2
  8. {
  9.     public class Triangle
  10.     {
  11.         internal class Point
  12.         {
  13.             public double X;
  14.             public double Y;
  15.  
  16.             public Point(double x, double y)
  17.             {
  18.                 X = x;
  19.                 Y = y;
  20.             }
  21.  
  22.             public double GetSize()
  23.             {
  24.                 return Math.Sqrt(Math.Pow(X, 2) + Math.Pow(Y, 2));            
  25.             }
  26.         }
  27.  
  28.        
  29.         private Point[] verts = new Point[3];
  30.  
  31.         private double[] _sizes = new double[3];
  32.  
  33.         public Triangle(double ax, double ay, double bx, double by, double cx, double cy)
  34.         {
  35.             verts[0] = new Point(bx - ax, by - ay);
  36.             verts[1] = new Point(cx - bx, cy - by);
  37.             verts[2] = new Point(cx - ax, cy - ay);
  38.  
  39.             _sizes = verts.Select(x => x.GetSize()).ToArray();
  40.  
  41.         }
  42.  
  43.         public double[] GetSideSizes()
  44.         {
  45.             return _sizes;
  46.         }
  47.  
  48.         public double GetPerimeter()
  49.         {
  50.             return GetSideSizes().Sum();
  51.         }
  52.  
  53.         public double GetArea()
  54.         {
  55.             var sizes = GetSideSizes();
  56.             var p = GetPerimeter()/2d;
  57.             return Math.Sqrt(p*sizes.Select(z=>p-z).Aggregate(1d, (x,y) => x*y));
  58.         }
  59.  
  60.         public bool Exists()
  61.         {
  62.             return _sizes[0] + _sizes[1] > _sizes[2] && _sizes[0] + _sizes[2] > _sizes[1] && _sizes[1] + _sizes[2] > _sizes[0];
  63.         }
  64.  
  65.         public double[] GetAngles()
  66.         {
  67.             var result = new double[3];
  68.             result[0] = Math.Acos( (Math.Pow(_sizes[1], 2) + Math.Pow(_sizes[2], 2) - Math.Pow(_sizes[0], 2))/(2*_sizes[1]*_sizes[2]) );
  69.             result[1] = Math.Acos( (Math.Pow(_sizes[0], 2) + Math.Pow(_sizes[2], 2) - Math.Pow(_sizes[1], 2)) / (2 * _sizes[0] * _sizes[2]) );
  70.             result[2] = Math.PI - result[0] - result[1];
  71.             return result;
  72.         }
  73.  
  74.     }
  75.  
  76.     public class EquiliteralTriangle : Triangle
  77.     {
  78.         public EquiliteralTriangle(double ax, double ay, double bx, double by, double cx, double cy) :
  79.             base(ax, ay, bx, by, cx, cy)
  80.         {
  81.  
  82.         }
  83.  
  84.         public bool IsEquiLiteral()
  85.         {
  86.             var sizes = GetSideSizes();
  87.             return !sizes.Any(x => Math.Abs(x - sizes[0]) > 1e3);
  88.         }
  89.  
  90.         public double GetMedian()
  91.         {
  92.             return GetSideSizes()[0] * Math.Sqrt(3) / 2;
  93.         }
  94.     }
  95. }

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


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

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

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы