From 489e524385b70813ab80a9efa84f2a00f3ddbcee Mon Sep 17 00:00:00 2001 From: Dmitry Kokorin Date: Thu, 17 Mar 2016 19:12:35 +0300 Subject: [PATCH] triangle: iteration 2 --- cpp/triangle/triangle.cpp | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/cpp/triangle/triangle.cpp b/cpp/triangle/triangle.cpp index c7ee869..43c3d83 100644 --- a/cpp/triangle/triangle.cpp +++ b/cpp/triangle/triangle.cpp @@ -10,7 +10,6 @@ using namespace std; namespace { - inline bool fuzzy_equal(double a, double b) { typedef numeric_limits limits_t; @@ -24,39 +23,25 @@ inline bool fuzzy_equal(double a, double b) || abs(a - b) < min; } -inline bool is_valid(double a, double b, double c) -{ - return a > 0 && b > 0 && c > 0 - && a + b > c - && a + c > b - && b + c > a; } -inline bool is_equilateral(double a, double b, double c) -{ - return fuzzy_equal(a, b) - && fuzzy_equal(a, c) - && fuzzy_equal(b, c); -} - -inline bool is_isosceles(double a, double b, double c) -{ - return fuzzy_equal(a, b) - || fuzzy_equal(a, c) - || fuzzy_equal(b, c); -} - -} kind_t kind(double a, double b, double c) { - if (!is_valid(a, b, c)) + if (a > b) swap(a, b); + if (a > c) swap(a, c); + if (b > c) swap(b, c); + + if (a <= 0) throw domain_error("invalid triangle"); - if (is_equilateral(a, b, c)) + if (a + b <= c) + throw domain_error(""); + + if (fuzzy_equal(a, c)) return equilateral; - if (is_isosceles(a, b, c)) + if (fuzzy_equal(a, b) || fuzzy_equal(b, c)) return isosceles; return scalene;