1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

[Вопрос]Решение квадратного уравнения

Тема в разделе 'C/C++', создана пользователем alekill, 26 окт 2011.

Статус темы:
Закрыта.
  1. TopicStarter Overlay

    alekill Пользователи

    Сообщения:
    166
    Лайки:
    27
    Репутация:
    0
    Команда:
    GreenCat
    Помогите найти ошибку,дискриминант правильный,но с корнями проблема..что же не так?Вот например уравнение 5x^2 - 6x + 1 = 0.Попробуйте решить на бумаге и на это программе:
    Код:
    #include <iostream>
    #include <locale.h>
    #include <windows.h>
    #include <math.h>
    
    using namespace std;
    
    int main()
    {
    setlocale( LC_ALL, "Russian" );
    cout << "Решение квадратного уравнения и вычисление дискриминанта дискриминанта по формуле x^2+bx+c=0,если нет какого-либо из члена,напишите 0" << endl;
    cout << "Введите a" << endl;
    
    double a,b,c,d,bk,kp,km,kd,bm;
    
    cin >> a;
    cout << "Введите b" << endl;
    cin >> b;
    cout << "Введите c" << endl;
    cin >> c;
    bk = pow(b,2);
    d = bk - 4 * a * c;
    cout << "Дискриминант = " << d;
    if (d < 0) 
    {
    cout << " < 0" << endl;
    cout << "Ответ:Корней нет" << endl;
    }
    else
    {
    cout << endl;
    kd = sqrt(d);
    bm = b / (-2);
    kp = (bm + kd) / (2 * a);
    km = (bm - kd) / (2 * a);
    cout << "Ответ: x1 = " << kp << endl;
    cout << "Ответ: x2 = " << km << endl;
    }
    system("PAUSE");
    }
  2. Beast Эксперт Программист Пользователи Open Source Contributor

    Сообщения:
    22
    Лайки:
    55
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    PWEmu
    Код:
    kd = sqrt(d);
    bm = b / (-2);
    kp = (bm + kd) / (2 * a);
    km = (bm - kd) / (2 * a);
    
    Ошибка вот в этом куске, зачем ты делишь b на -2? Нужно просто менять знак bm = -b;
    1 человеку нравится это.
  3. TopicStarter Overlay

    alekill Пользователи

    Сообщения:
    166
    Лайки:
    27
    Репутация:
    0
    Команда:
    GreenCat
    Изменил,теперь вот так:
    Код:
    else
    {
    cout << endl;
    kd = sqrt(d);
    kp = (-b + kd) / (2.0 * a);
    km = (-b - kd) / (2.0 * a);
    cout << "Ответ: x1 = " << kp << endl;
    cout << "Ответ: x2 = " << km << endl;
    }
    
    Всё равно корни не правильные.И заменил int числа (2 и 4) double'овыми 2.0 и 4.0
  4. Beast Эксперт Программист Пользователи Open Source Contributor

    Сообщения:
    22
    Лайки:
    55
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    PWEmu
    У меня выдает правильные:
    a = 5
    b = -6
    c = 1
    дискриминант = 16
    x1 = 1
    x2 = 0.2
    1 человеку нравится это.
  5. Beast Эксперт Программист Пользователи Open Source Contributor

    Сообщения:
    22
    Лайки:
    55
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    PWEmu
    Вот этот код выдает у меня 100% правильные ответы :D Компилю под виндой с помощью Cygwin
    Код:
    #include <cstdlib>
    #include <iostream>
    #include <locale.h>
    #include <windows.h>
    #include <math.h>
    
    using namespace std;
    
    int main(int argc, char** argv)
    {
    setlocale(LC_ALL, "Russian");
    cout << "Решение квадратного уравнения и вычисление дискриминанта дискриминанта по формуле x^2+bx+c=0,если нет какого-либо из члена,напишите 0" << endl;
    cout << "Введите a" << endl;
    
    double a, b, c, d, bk, kp, km, kd, bm;
    
    cin >> a;
    cout << "Введите b" << endl;
    cin >> b;
    cout << "Введите c" << endl;
    cin >> c;
    bk = pow(b, 2);
    d = bk - 4.0 * a * c;
    cout << "Дискриминант = " << d;
    if(d < 0)
    {
    cout << " < 0" << endl;
    cout << "Ответ:Корней нет" << endl;
    }
    else
    {
    cout << endl;
    kd = sqrt(d);
    kp = (-b + kd) / (2.0 * a);
    km = (-b - kd) / (2.0 * a);
    cout << "Ответ: x1 = " << kp << endl;
    cout << "Ответ: x2 = " << km << endl;
    }
    system("PAUSE");
    return 0;
    }
    
    1 человеку нравится это.
  6. TopicStarter Overlay

    alekill Пользователи

    Сообщения:
    166
    Лайки:
    27
    Репутация:
    0
    Команда:
    GreenCat
    Всё,спасибо,выяснилось,что я идиот и не правильно посчитал на бумаге :D
    Можно закрыть.
Черновик сохранён Черновик удалён
Статус темы:
Закрыта.

Поделиться этой страницей