Ответы на вопрос » образование » Как исправить не рабочий код программы?
                                 
Задавайте вопросы и получайте ответы от участников сайта и специалистов своего дела.
Отвечайте на вопросы и помогайте людям узнать верный ответ на поставленный вопрос.
Начните зарабатывать $ на сайте. Задавайте вопросы и отвечайте на них.
Закрыть меню
Вопросы без Ответа Радио


Как исправить не рабочий код программы?


опубликовал 15-03-2025, 19:16
Как исправить не рабочий код программы?



1
48
0
0


Ответы на вопрос:

  1. Гена
    Gena 30 марта 2025 17:09

    отзыв нравится 0 отзыв не нравится

    Проблема с отрицательной площадью треугольника в вашем коде может возникать из-за неправильного порядка координат при расчете площади. Давайте разберемся с вашим кодом и выделим основные проблемы и их возможные решения.

    1. **Проблема с расчетом площади**: 
       Ваша функция `Ploshad` использует следующую формулу:

       ```cpp
       return ((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2))/2);
       ```

       По сути, формула определяет площадь треугольника по координатам его вершин. Однако использование деления на 2 без конструирования модуля может привести к отрицательным значениям для площади. Если координаты точек расположены так, что результат выражения оказывается отрицательным, то вы получите отрицательную площадь. Рекомендуется использовать:

       ```cpp
       return fabs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2;
       ```

       Функция `fabs` из библиотеки `<cmath>` (или `<math.h>`) возвращает абсолютное значение числа, тем самым мы обеспечиваем положительность площади.

    2. **Неправильный ввод данных**:
       В вашем `main` методе:

       ```cpp
       Treygol treygol(1,1,2,3,4,5);
       ```

       Это означает, что треугольник определяется точками (1, 1), (2, 3) и (4, 5). Эти точки действительно не могут образовать треугольник, так как они лежат на одной линии. Это также можно проверить с помощью вашей функции `Possible()`, которая определяет, возможно ли построить треугольник из заданных координат. Убедитесь, что вводимые координаты не коллинеарны.

    3. **Исправление вывода**:
       А также исправьте форматирование вашего вывода. У вас есть ошибка в методе `VivodTreygol`, где вы не выводите правильно строки. Вместо:

       ```cpp
       cout << "n";
       ```

       Используйте:

       ```cpp
       cout << "\n";   // Чтобы вывести новую строку
       ```

       Это сделает ваш вывод более читабельным.

    4. **Синтаксические ошибки**:
       Убедитесь, что ваш код соблюдает синтаксические правила C++. Например:

       Для команды `VivodTreygolSHY` в `main` у вас должно быть:

       ```cpp
       treygol.VivodTreygol();
       ```

       Это исправляет опечатку и обеспечивает правильное выполнение метода вывода.

    5. **Код после исправлений**:
       Вот упрощённая версия вашего класса с коррекциями:

       
    
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    class Treygol {
    private:
    double x1, y1;
    double x2, y2;
    double x3, y3;
    public:
    Treygol(double x_1=0.0, double y_1=0.0, double x_2=0.0, double y_2=0.0, double x_3=0.0, double y_3=0.0) {
    x1=x_1; y1=y_1; x2=x_2; y2=y_2; x3=x_3; y3=y_3;
    }
    double Ploshad(void);
    double Perimeter(void);
    void VivodTreygol(void);
    bool Possible(void);
    };
    
    double Treygol::Ploshad() {
    return fabs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2;
    }
    
    // Остальные функции...
    
    int main() {
    Treygol treygol(1,1,2,3,3,1); // Измените эти значения для корректного треугольника
    cout << "Sam Treygolnik: \n" << treygol;
    if (treygol.Possible()) {
    treygol.VivodTreygol();
    } else {
    cout << "!!!NEREAL POSTROIT!!!\n";
    }
    return 0;
    }
    


    Изменения в коде должны помочь устранить проблему с отрицательной площадью и сделать вывод правильным. Также проверьте вводимые координаты на их валидность, чтобы гарантировать, что они формируют действительный треугольник.

    Ссылка на ответ | Все вопросы
    30
    03
Добавить ответ
Ваше Имя:
Ваш E-Mail:
Введите два слова, показанных на изображении: *




Показать все вопросы без ответов >>