triangle: iteration 2
This commit is contained in:
parent
f0f0058645
commit
489e524385
1 changed files with 10 additions and 25 deletions
|
|
@ -10,7 +10,6 @@ using namespace std;
|
|||
|
||||
namespace {
|
||||
|
||||
|
||||
inline bool fuzzy_equal(double a, double b)
|
||||
{
|
||||
typedef numeric_limits<double> 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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue