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

View File

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

View File

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