Created
April 10, 2015 07:11
-
-
Save lomomike/7d8c647d37f4f58df59a to your computer and use it in GitHub Desktop.
RectangularTriangleSquare
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace Geometry | |
{ | |
/// <summary> | |
/// Класс предназначен для геометрических операций с прямоугольным треугольником. | |
/// </summary> | |
public static class RectangularTriangle | |
{ | |
/// <summary> | |
/// Покеазатель точности, с которой проводятся расчеты. | |
/// </summary> | |
public const double Tolerance = 1e-5; | |
/// <summary> | |
/// Рассчитывает площадь прмоугольного треугольника. | |
/// </summary> | |
/// <param name="a">Сторона A прямоугольного треугольника.</param> | |
/// <param name="b">Сторона B прямоугольного треугольника.</param> | |
/// <param name="c">Сторона С прямоугольного треугольника.</param> | |
/// <returns>Площадь прямугольного треугольниика, рассчитанная по заданным сторонам.</returns> | |
/// <exception cref="ArgumentException">Исключение возникает в качестве одной или нескольких сторон неположительного значения. | |
/// Или же при передаче значений сторон, которые не образуют прямоугольный треугольник.</exception> | |
/// <remarks> | |
/// В текущей реализации стороны можно задавать в любом порядке. Важно, чтобы значения были положительные | |
/// и вместе образовывали прямоугольный треугольник. | |
/// </remarks> | |
public static double Square(double a, double b, double c) | |
{ | |
if(a < Tolerance) | |
throw new ArgumentException("Сторона а должна иметь положительное значение", "a"); | |
if (b < Tolerance) | |
throw new ArgumentException("Сторона b должна иметь положительное значение", "b"); | |
if (c < Tolerance) | |
throw new ArgumentException("Сторона c должна иметь положительное значение", "c"); | |
double[] sides = { a, b, c }; | |
Array.Sort(sides); | |
if(!TriangleIsRectagular(sides[0], sides[1], sides[2])) | |
throw new ArgumentException("Заданные стороны не соответсвую прямоугольному треугольнику."); | |
return (sides[0]*sides[1]/2); | |
} | |
private static bool TriangleIsRectagular(double a, double b, double c) | |
{ | |
return Math.Abs((a*a + b*b) - c*c) < Tolerance; | |
} | |
} | |
[TestFixture] | |
class RectangularTriangleTests | |
{ | |
[TestCase(0, 1, 1)] | |
[TestCase(-1, 1, 1)] | |
[TestCase(1, 0, 1)] | |
[TestCase(1, -1, 1)] | |
[TestCase(1, 1, 0)] | |
[TestCase(1, 1, -1)] | |
public void TriangleSidesShouldBePositive(double a, double b, double c) | |
{ | |
Assert.Throws<ArgumentException>(() => RectangularTriangle.Square(a, b, c)); | |
} | |
[TestCase(1, 2, 3, ExpectedException = typeof(ArgumentException), | |
ExpectedMessage = "Заданные стороны не соответсвую прямоугольному треугольнику.")] | |
[TestCase(3, 4, 5)] | |
public void TriangleShouldBeRectangular(double a, double b, double c) | |
{ | |
RectangularTriangle.Square(a, b, c); | |
} | |
[Test] | |
public void SquareShouldCalculatesCorrect() | |
{ | |
Assert.That(RectangularTriangle.Square(3,4,5), Is.EqualTo(6.0).Within(RectangularTriangle.Tolerance)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment