Archived
1
0

Add comments

This commit is contained in:
Serghei Cebotari 2023-11-16 15:48:44 +03:00
parent 15b215010b
commit d3517a86fb
3 changed files with 23 additions and 2 deletions

View File

@ -1,7 +1,18 @@
namespace MindBox.Lib;
/// <summary>
/// Абстрактный класс, реализующий интерфейс двумерной фигуры.
/// Посчитал нужным создать отдельный абстрактный класс, это более гибкое решение.
/// Такой класс можно расширить другими интерфейсами, например IColorful - контракт для методов получения и/или изменения цвета фигуры.
/// Прочие интерфейсы могут быть применимы не только к двумерным фигурам
/// </summary>
public abstract class FlatShape : ITwoDimensional
{
/// <summary>
/// Поле для хранения вычисляемого значения площади.
/// Вычисляем значение только один раз.
/// </summary>
protected double? _area;
public abstract double GetArea();
}

View File

@ -1,5 +1,9 @@
namespace MindBox.Lib;
/// <summary>
/// Интерфейс для методов, которые можно применить для двумерной фигуры.
/// Можно впоследствии дополнить методами вычисления периметра, etc
/// </summary>
public interface ITwoDimensional
{
public double GetArea();

View File

@ -2,6 +2,7 @@ namespace MindBox.Lib;
public class Triangle : FlatShape
{
// Может потребоваться хранить разные стороны в разных полях, но для нашей задачи это избыточно
private readonly double[] _sides;
public Triangle(double a, double b, double c)
@ -16,6 +17,9 @@ public class Triangle : FlatShape
throw new ArgumentException($"Sides lengths are not valid: {a}, {b}, {c}");
}
}
/// <summary>
/// Вычисление площади реугольника по формуле Герона
/// </summary>
public override double GetArea()
{
if (_area != null)
@ -31,14 +35,16 @@ public class Triangle : FlatShape
(semiPerimeter - _sides[2]));
return _area.Value;
}
}
}
public bool IsRight()
{
var sorted = _sides.OrderByDescending(x => x);
// Самая длинная сторона: гипотенуза
double hypotenuse = sorted.First();
// Две другие - катеты
var catheti = sorted.Skip(1);
return hypotenuse * hypotenuse == catheti.Sum(x => x * x);
}
}
}