#include <iostream>
#include <math.h>
void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
double GetValueFromUser() {
double value = 0;
std::cin >> value;
return value;
}
bool IsTirangleExists(double a, double b, double c) {
return (a + b != c) && (a + c != b) && (b + c != a);
}
bool IsTriangleEquilateral(double a, double b, double c) {
return (a == b) && (b == c);
}
bool IsTriangleIsosceles(double a, double b, double c) {
return (a == b) || (a == c) || (b == c);
}
void AskUserForTirangleInput() {
std::cout << "Введите три стороны треугольника\n";
}
void ShowNonExistingTriangleErrorMessage() {
std::cout << "треугольника не существует\n";
}
void ShowTriangleIsEquilateralMessage() {
std::cout << "треугольник равносторонний\n";
}
void ShowTriangleIsIsoscelesMessage() {
std::cout << "треугольник равнобедренный\n";
}
void ShowTirangleAreaMessage(double area_of_triangle) {
std::cout << "S = " << area_of_triangle << '\n';
}
double PerimeterOfTriangle(double a, double b, double c) { return a + b + c; }
double AreaOfTriangle(double a, double b, double c) {
double p = PerimeterOfTriangle(a, b, c);
return sqrt(p * (p - a) * (p - b) * (p - c));
}
void ShowTriangleProperties(double a, double b, double c) {
if (IsTriangleEquilateral(a, b, c)) {
ShowTriangleIsEquilateralMessage();
} else if (IsTriangleIsosceles(a, b, c)) {
ShowTriangleIsIsoscelesMessage();
}
double area_of_triangle = AreaOfTriangle(a, b, c);
ShowTirangleAreaMessage(area_of_triangle);
}
int main() {
SetRussianLocale();
AskUserForTirangleInput();
double a = GetValueFromUser();
double b = GetValueFromUser();
double c = GetValueFromUser();
if (!IsTirangleExists(a, b, c)) {
ShowNonExistingTriangleErrorMessage();
} else {
ShowTriangleProperties(a, b, c);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgoKdm9pZCBTZXRSdXNzaWFuTG9jYWxlKCkgeyBzZXRsb2NhbGUoTENfQUxMLCAiUnVzc2lhbiIpOyB9Cgpkb3VibGUgR2V0VmFsdWVGcm9tVXNlcigpIHsKICBkb3VibGUgdmFsdWUgPSAwOwogIHN0ZDo6Y2luID4+IHZhbHVlOwogIHJldHVybiB2YWx1ZTsKfQoKYm9vbCBJc1RpcmFuZ2xlRXhpc3RzKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpIHsKICByZXR1cm4gKGEgKyBiICE9IGMpICYmIChhICsgYyAhPSBiKSAmJiAoYiArIGMgIT0gYSk7Cn0KCmJvb2wgSXNUcmlhbmdsZUVxdWlsYXRlcmFsKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpIHsKICByZXR1cm4gKGEgPT0gYikgJiYgKGIgPT0gYyk7Cn0KCmJvb2wgSXNUcmlhbmdsZUlzb3NjZWxlcyhkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKSB7CiAgcmV0dXJuIChhID09IGIpIHx8IChhID09IGMpIHx8IChiID09IGMpOwp9Cgp2b2lkIEFza1VzZXJGb3JUaXJhbmdsZUlucHV0KCkgewogIHN0ZDo6Y291dCA8PCAi0JLQstC10LTQuNGC0LUg0YLRgNC4INGB0YLQvtGA0L7QvdGLINGC0YDQtdGD0LPQvtC70YzQvdC40LrQsFxuIjsKfQoKdm9pZCBTaG93Tm9uRXhpc3RpbmdUcmlhbmdsZUVycm9yTWVzc2FnZSgpIHsKICBzdGQ6OmNvdXQgPDwgItGC0YDQtdGD0LPQvtC70YzQvdC40LrQsCDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCXG4iOwp9Cgp2b2lkIFNob3dUcmlhbmdsZUlzRXF1aWxhdGVyYWxNZXNzYWdlKCkgewogIHN0ZDo6Y291dCA8PCAi0YLRgNC10YPQs9C+0LvRjNC90LjQuiDRgNCw0LLQvdC+0YHRgtC+0YDQvtC90L3QuNC5XG4iOwp9Cgp2b2lkIFNob3dUcmlhbmdsZUlzSXNvc2NlbGVzTWVzc2FnZSgpIHsKICBzdGQ6OmNvdXQgPDwgItGC0YDQtdGD0LPQvtC70YzQvdC40Log0YDQsNCy0L3QvtCx0LXQtNGA0LXQvdC90YvQuVxuIjsKfQoKdm9pZCBTaG93VGlyYW5nbGVBcmVhTWVzc2FnZShkb3VibGUgYXJlYV9vZl90cmlhbmdsZSkgewogIHN0ZDo6Y291dCA8PCAiUyA9ICIgPDwgYXJlYV9vZl90cmlhbmdsZSA8PCAnXG4nOwp9Cgpkb3VibGUgUGVyaW1ldGVyT2ZUcmlhbmdsZShkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKSB7IHJldHVybiBhICsgYiArIGM7IH0KCmRvdWJsZSBBcmVhT2ZUcmlhbmdsZShkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKSB7CiAgZG91YmxlIHAgPSBQZXJpbWV0ZXJPZlRyaWFuZ2xlKGEsIGIsIGMpOwogIHJldHVybiBzcXJ0KHAgKiAocCAtIGEpICogKHAgLSBiKSAqIChwIC0gYykpOwp9Cgp2b2lkIFNob3dUcmlhbmdsZVByb3BlcnRpZXMoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYykgewogIGlmIChJc1RyaWFuZ2xlRXF1aWxhdGVyYWwoYSwgYiwgYykpIHsKICAgIFNob3dUcmlhbmdsZUlzRXF1aWxhdGVyYWxNZXNzYWdlKCk7CiAgfSBlbHNlIGlmIChJc1RyaWFuZ2xlSXNvc2NlbGVzKGEsIGIsIGMpKSB7CiAgICBTaG93VHJpYW5nbGVJc0lzb3NjZWxlc01lc3NhZ2UoKTsKICB9CiAgZG91YmxlIGFyZWFfb2ZfdHJpYW5nbGUgPSBBcmVhT2ZUcmlhbmdsZShhLCBiLCBjKTsKICBTaG93VGlyYW5nbGVBcmVhTWVzc2FnZShhcmVhX29mX3RyaWFuZ2xlKTsKfQoKaW50IG1haW4oKSB7CiAgU2V0UnVzc2lhbkxvY2FsZSgpOwogIEFza1VzZXJGb3JUaXJhbmdsZUlucHV0KCk7CiAgZG91YmxlIGEgPSBHZXRWYWx1ZUZyb21Vc2VyKCk7CiAgZG91YmxlIGIgPSBHZXRWYWx1ZUZyb21Vc2VyKCk7CiAgZG91YmxlIGMgPSBHZXRWYWx1ZUZyb21Vc2VyKCk7CiAgaWYgKCFJc1RpcmFuZ2xlRXhpc3RzKGEsIGIsIGMpKSB7CiAgICBTaG93Tm9uRXhpc3RpbmdUcmlhbmdsZUVycm9yTWVzc2FnZSgpOwogIH0gZWxzZSB7CiAgICBTaG93VHJpYW5nbGVQcm9wZXJ0aWVzKGEsIGIsIGMpOwogIH0KfQo=