Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
serega1231232
1

Квадратное уравнение решается неправильно

24.10.2014, 22:49. Показов 2296. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте,решил написать программу на с++,решающую квадратное уравнение,но она решает его неверно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <cmath>
int main()
{
    double x1, x2, a, b, c;
    std::cout<<"A, B, C"<<std::endl;
    std::cin>>a>>b>>c;
    double d;
    d=(b*b)-(4*a*c);
    if (b<0)
    {
        std::cout<<"NOOOOO"<<std::endl;
        std::cin>>a;
        return 0;
    }
    if (b=0)
    {
        x1=-b/(2*a);
        std::cout<<"Koren 1  ====="<<x1<<std::endl;
        std::cin>>a;
        return 0;
    }
    if (d>0)
    {
        x1=(-b+sqrt(d))/(2*a);
        x2=(-b-sqrt(d))/(2*a);
        std::cout<<"Koren 1==="<<x1<<"    "<<"Koren 2===="<<x2<<std::endl;
        std::cin>>c;
    }
    return 0;
}
Подскажите пожалуй,в чем я ошибся.
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2014, 22:49
Ответы с готовыми решениями:

Создать производные классы линейное уравнение и квадратное уравнение, в которых данная функция переопределена
Создать абстрактный базовый класс уравнение с виртуальной функцией - корни уравнения. Создать...

Как решается это уравнение?
Как решается это уравнение?

Квадратное уравнение
Написала программу, вроде все должно работать, как должно, ан нет... Условие: у=корень квадратный...

Квадратное уравнение
Пишет ошибку &quot;тип &quot;double&quot; не требуется&quot; и &quot;d: необъявленный идентификатор&quot;, помогите разобраться...

5
Заблокирован
24.10.2014, 22:54 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cmath>
int main()
{
    double x1, x2, a, b, c;
    std::cout<<"A, B, C"<<std::endl;
    std::cin>>a>>b>>c;
    double d;
    d=(b*b)-(4*a*c);
    if (d<0)
    {
        std::cout<<"NOOOOO"<<std::endl;
    }
     else if (d>0)
    {
        x1=(-b+sqrt(d))/(2*a);
        x2=(-b-sqrt(d))/(2*a);
        std::cout<<"Koren 1==="<<x1<<"    "<<"Koren 2===="<<x2<<std::endl;
     }
    else
    {
        x1=-b/(2*a);
        std::cout<<"Koren 1  ====="<<x1<<std::endl;
      }
    std::cin.sync();
    std::cin.get();
    return 0;
 }
1
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
24.10.2014, 22:54 3
Цитата Сообщение от serega1231232 Посмотреть сообщение
if (b<0)
Цитата Сообщение от serega1231232 Посмотреть сообщение
if (b=0)
C++
1
2
3
4
if (d < 0)
{...}
if (d == 0)
{...}
0
Заблокирован
24.10.2014, 22:58 4
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
if (d == 0)
Для типов с плавающей точкой стараемся избегать сравнения с целым нулём.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
24.10.2014, 23:11 5
Только d>0 и d<0 ничем не лучше, чем d==0...
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
25.10.2014, 01:37 6
Лучший ответ Сообщение было отмечено как решение

Решение

Тривиальные ошибки в коде, я думаю, вам укажут.

Но тут стоит еще добавить, что решение квадратного уравнения - это одна из известных задач, которая демонстрирует, как "наивная" работа с числами, представленными в формате с плавающей точкой, может привести к совершенно бессмысленным результатам. Именно к бессмысленным результатам вы рискуете прийти, если будете решать квадратное уравнение в рамках типа 'double' в лоб, т.е. по формулам "из школы". На эту тему есть классическая статья 1966 года "How do you solve a quadratic equation" (англ.)(http://i.stanford.edu/pub/cstr... -66-40.pdf)

Суть в том, что если величина https://www.cyberforum.ru/cgi-bin/latex.cgi?-B близка к величине https://www.cyberforum.ru/cgi-bin/latex.cgi?D (дискриминант) и при этом оба числа относительно велики, то вычисление разности https://www.cyberforum.ru/cgi-bin/latex.cgi?-B  -  \sqrt{D} будет выполнено с гигантской потерей точности и соответствующее решение уравнения будут весьма далеко от истины.

Более правильный способ решения квадратного уравнения, относительно свободный от этой проблемы - это вычислить промежуточную величину https://www.cyberforum.ru/cgi-bin/latex.cgi?Q по следующей формуле

https://www.cyberforum.ru/cgi-bin/latex.cgi?Q = \begin{cases} & \frac{-B - \sqrt{D}}{2}\text {, } B\geq 0  \\  & \frac{-B + \sqrt{D}}{2}\text {, } B < 0\end{cases}

в затем найти корни уравнения как

https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{1} = Q / A
https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{2} = C / Q

(где A, B и C - коэффициенты квадратного уравнения)
3
25.10.2014, 01:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2014, 01:37
Помогаю со студенческими работами здесь

Квадратное уравнение
ПОМОГИТЕ ПЛИЗ ДОПИСАТЬ ЗАДАЧУ А ТО ЧТОТ ВАШПЕ НЕПОЛУЧАЕТСЯ , НЕРАБОТАЕТ ))*ЕСЛИ МОЖНО ТО С...

Квадратное уравнение
ax^2+bx+c=o в c\c++

Квадратное уравнение
Все здраствуйте))Изучаю С++ второй день)решил написать программу для решения корней квадратного...

С++ квадратное уравнение
Здравствуйте! Подскажите с чего начать вот такую задачу решать. Спасибо всем за помощь! Задача...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru