Add comments
This commit is contained in:
parent
15b215010b
commit
d3517a86fb
@ -1,7 +1,18 @@
|
||||
namespace MindBox.Lib;
|
||||
|
||||
/// <summary>
|
||||
/// Абстрактный класс, реализующий интерфейс двумерной фигуры.
|
||||
/// Посчитал нужным создать отдельный абстрактный класс, это более гибкое решение.
|
||||
/// Такой класс можно расширить другими интерфейсами, например IColorful - контракт для методов получения и/или изменения цвета фигуры.
|
||||
/// Прочие интерфейсы могут быть применимы не только к двумерным фигурам
|
||||
/// </summary>
|
||||
public abstract class FlatShape : ITwoDimensional
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Поле для хранения вычисляемого значения площади.
|
||||
/// Вычисляем значение только один раз.
|
||||
/// </summary>
|
||||
protected double? _area;
|
||||
public abstract double GetArea();
|
||||
}
|
||||
|
@ -1,5 +1,9 @@
|
||||
namespace MindBox.Lib;
|
||||
|
||||
/// <summary>
|
||||
/// Интерфейс для методов, которые можно применить для двумерной фигуры.
|
||||
/// Можно впоследствии дополнить методами вычисления периметра, etc
|
||||
/// </summary>
|
||||
public interface ITwoDimensional
|
||||
{
|
||||
public double GetArea();
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user