@DufGut

Является ли код правильным?

Написал код, но сомневаюсь в его написание. Тема: Обработка исключительных ситуаций
Задание: Написать программу согласно варианту, демонстрацию обработки исключительной ситуации, генерирующей ошибку пользовательского типа (т.е. написать свой класс "исключение"). Треугольник задается координатами вершин на плоскости: A(x1, y1), B(x2, y2), C(x3, y3). Определить, является ли этот треугольник вырожденным. Исключение: точки не лежат на одной прямой.
#include <iostream>
using namespace std;

class CustomException : public exception {
public:
    const char* what() const throw() {
        return "Треугольник вырожденный!";
    }
};

class Triangle {
private:
    int x1, y1, x2, y2, x3, y3;

public:
    void inputSides() {
        cout << "Введите координаты точки A (x1 y1): ";
        cin >> x1 >> y1;
        cout << "Введите координаты точки B (x2 y2): ";
        cin >> x2 >> y2;
        cout << "Введите координаты точки C (x3 y3): ";
        cin >> x3 >> y3;
    }

    void checkDegeneracy() {
        if ((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) == 0) {
            throw CustomException();
        }
        else {
            cout << "Треугольник не вырожден. Он образует правильный треугольник." << endl;
        }
    }
};

int main() {
    setlocale(0, "");
    Triangle triangle;
    triangle.inputSides();

    try {
        triangle.checkDegeneracy();
    }
    catch (CustomException& e) {
        cerr << e.what() << endl;
    }
}
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
@alexalexes
(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) == 0

Пока переменные - целые числа. Данное выражение может сработать на истину.
Но если захотите вещественные числа применять, то придется ввести константу или переменную для сглаживания погрешности работы с числами с плавающей запятой.
abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) <= eps

eps - это макс. значение ошибки, при работе с числами с плавающей запятой. Очень сильно будет зависеть, в каких масштабах будут остальные переменные. Если единицы - то eps будет 0,001, если другие переменные сотни и тысячи, то эпсилон будет 0,1 (для примера привел числа, чтобы понимать масштаб).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы