Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
Deniza
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 5
#1

Найти корни уравнения ах2 +bx+c=0 - C++

10.09.2012, 19:13. Просмотров 2544. Ответов 11
Метки нет (Все метки)

Даны вещественные числа а, b, с (a не равно 0). Вы*яснить, имеет ли уравнение ах2 +bx+c = 0 веще*ственные корни.если такие корни имеются,то найти их,ну а если нет ответом должно служить сообщение,что вещественных корней нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2012, 19:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти корни уравнения ах2 +bx+c=0 (C++):

Отделить корни уравнения графически. Уточнить корни уравнения методом половинного деления - C++
Здравствуйте, господа программисты, помогите пожалуйста код написать, очень нужна ваша помощь) Вот задание: " Отделить корни уравнения...

Найти корни уравнения - C++
Здравствуйте, хотел попросить добрых людей о помощи с написанием совсем простейшей программы, функция которой - возведение числа "x" в...

Найти корни уравнения - C++
Тексты надо переписывать в тело сообщения В чем ошибка ? Помогите пожалуйста.

Найти корни уравнения - C++
найти корни уравнения f(x)=2x^3-3x^2-3x+2=0

Найти корни уравнения - C++
f(x)=6x4+19x3-7x2-26x+12=0

Найти корни уравнения - C++
Написать программу, которая находит корни уравнения e^x=x+2 с погрешностью 10^-10. Заранее благодарен.

11
Catstail
Модератор
22640 / 11009 / 1785
Регистрация: 12.02.2012
Сообщений: 18,173
10.09.2012, 19:46 #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
29
30
31
32
33
34
#include <iostream.h>
#include <math.h>
 
int main(int argc, char* argv[])
{
    double a,b,c,d,x1,x2;
    cout << "a=";
    cin >> a;
    cout << "b=";
    cin >> b;
    cout << "c=";
    cin >> c;
 
    d=b*b-4*a*c;
 
    if (d < 0)
        cout << "No real roots" << endl;
    else
        if (fabs(d) <= 1E-16)
        {
            x1=-b/(2*a);
            cout << "Single root=" << x1 << endl;
        }
        else
        {
            x1=(-b+sqrt(d))/(2*a);
            x2=(-b-sqrt(d))/(2*a);
            cout << "Two roots:" << endl;
            cout << "x1=" << x1 << endl;
            cout << "x2=" << x2 << endl;
        }
 
    return 0;
}
1
Ataman
1 / 1 / 1
Регистрация: 27.10.2011
Сообщений: 33
10.09.2012, 19:59 #3
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
32
#include <iostream>
#include <cmath>
using namespace std;
 
void SquareEquation(float *root, float a, float b, float c) {
    root[0]=((-b + sqrt(pow(b,2) - (4*a*c))) / (2*a));
    root[1]=((-b - sqrt(pow(b,2) - (4*a*c))) / (2*a));
}
 
void main() {
    float root[2], a, b, c;
 
    cout << "Enter a,b,c numbers for equation ax^2 + bx + c: ";
    cin >> a >> b >> c;
    while(a==0) {
        cout << "a - parameter cann't be equal to zero, please reenter number: ";
        cin >> a;
    }
 
    SquareEquation(root, a, b, c);
 
    bool real_root=false;
    if(root[0] - (int)root[0] == 0) {
        cout << "x=" << root[0] <<endl;
        real_root=true;
    }
    if(root[1] - (int)root[1] == 0) {
        cout << "x=" << root[1] <<endl;
        real_root=true;
    }
    if(!real_root) cout << "there is no Real roots in this equation" <<endl;
}
0
xumera
1 / 1 / 0
Регистрация: 05.07.2012
Сообщений: 81
10.09.2012, 20:17 #4
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
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<iostream>
#include<iomanip>
using std::cin;
using std::cout;
using std::endl;
int main()
{
    int a(0),b(0),c(0);
    double d(0.0),x1(0.0),x2(0.0);
        cout<<endl
            <<"vedit chuslo a";
        cin>>a;
        cout<<endl
            <<"vedit chuslo b";
        cin>>b;
        cout<<endl
            <<"vedit chuslo c";
        cin>>c;
        d=b*b-4*a*c;
        cout<<endl<<"d= "<<d;
            if(d>0)
            {
                x1=-b+sqrt(d);
                x2=-b-sqrt(d);
                cout<<endl
                    <<"est 2 koren"<<endl
                    <<"x1= "<<x1<<endl
                    <<"x2= "<<x2<<endl;
            }
            if(d=0)
            {
                x1=-b/2*a;
                cout<<endl
                    <<"est 1 koren"
                    <<"x1=x2= "<<x1;
            }
            else
            {
                cout<<endl
                    <<"rivniania nemae rozviazkiv";
            }
                    
        return 0;
}
0
Neko101210
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 6
10.09.2012, 20:52 #5
Столько разных решений
А у меня так получалось (но я совсем еще новичок)
C++ (Qt)
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
#include <iostream>
#include <math.h>
using namespace std;
 
main ()
{
 double a, b, c;
 cout<<"enter a number with the exception of 0\n a=";
 cin>>a;
 cout<<"enter a number\n b=";
 cin>>b;
 cout<<"enter a number\n c="; 
 cin>>c;
 double D=b*b-4*a*c;
  if (D>0){
    cout<<"x1="<<(-b+sqrt(b*b-4*a*c))/2*a<<endl;
    cout<<"x2="<<(-b-sqrt(b*b-4*a*c))/2*a<<endl;
  } else {
    if (D=0){
      cout<<"x="<<(-b+sqrt(b*b-4*a*c))/2*a<<endl;
    } else {
      cout<<"there are no real roots of the equation"<<endl;
      }
  }
return 0;
}
0
Catstail
Модератор
22640 / 11009 / 1785
Регистрация: 12.02.2012
Сообщений: 18,173
10.09.2012, 20:55 #6
Для первого раза неплохо. Но зачем ты несколько раз перевычисляешь b2-4ac?
0
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
10.09.2012, 20:58 #7
C++
1
if (D=0){
не проверка на равенство(==), а присваивание(=). Программа будет всегда присваивать D нуль и выполнять первый блок условного оператора if.
0
Neko101210
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 6
10.09.2012, 21:16 #8
Catstail, спасибо. Поняла, что ступила))
не проверка на равенство(==), а присваивание(=). Программа будет всегда присваивать D нуль и выполнять первый блок условного оператора if.
тоже вроде ясно, только у меня про отсутствие корней тоже исправно пишет Но на будущее буду знать, спасибо
0
Borkot
4 / 4 / 0
Регистрация: 05.05.2012
Сообщений: 184
Записей в блоге: 1
10.09.2012, 22:03 #9
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<iostream>
#include<math.h>
#include<conio.h>
#include <cstdlib>
using namespace std;
void main()
{
    setlocale(LC_ALL, "Russian");
     int p;
    cout<<"Нажмите для выхода ESC , для продолжения любую другую клавишу\n\n";
    p=getch();
    while(p!=27)
    {float a,b,c,x,D,x1,x2;
    cout<<"Представленно уравнение вида a*(x^2)+b*x+c=0\n";
    cout<<"Введите коэфициент\na(затем нажмите Enter),\nb(затем нажмите Enter),\nc(затем нажмите Enter).\n";
    cin>>a>>b>>c;
    D=(b*b)-(4*a*c);
    cout<<"\nИскомый элемент D=(b*b)-(4*a*c)\tD=("<<b<<'*'<<b<<")-(4*"<<a<<'*'<<c<<")\n\n";
    cout<<"D ="<<D<<"\n\n";
    if(D!=0)
    {
        if(D>0)
        {
           cout<<"x1=(-b+(\\/D``))/2*a*c\tx2=(-b-(\\/D``))/2*a*c\n\n";
           cout<<"x1=(-"<<b<<"+(\\/"<<D<<"``))/2*"<<a<<'*'<<c;
           x1=(-b+(sqrt(D)))/2*a*c;
           x2=(-b-(sqrt(D)))/2*a*c;
           cout<<"\tx1="<<x1<<"\n";
           cout<<"x2=(-"<<b<<"-(\\/"<<D<<"``))/2*"<<a<<'*'<<c;
           cout<<"\tx2="<<x2<<"\n\n";
           cout<<"корни квадратного уравнения x1="<<x1<<";x2="<<x2<<"\n\n";
        }
        else
        {
            cout<<D<<"<0\n";
            cout<<"Уравнение не имеет корней\n\n";
        }
 
    }
    else
    {
        x=(-b)/(2*a);
        cout<<" x=(-b)/(2*a)=\tx="<<(-b)<<"/(2*"<<a<<")= "<<x<<"\n\n";
        cout<<"Ответ корень x="<<x<<"\n\n";
    }
    cout<<"Нажмите для выхода ESC , для продолжения любую другую клавишу\n";
    
    p=getch();
    system("cls");
    cout<<"\1\tА ТЕПЕРЬ РАДИ ПРИКОЛА ВМЕСТО ЦИФР БУКВЫ \1\n\n";
    }
}
0
Catstail
Модератор
22640 / 11009 / 1785
Регистрация: 12.02.2012
Сообщений: 18,173
10.09.2012, 22:11 #10
В одной книге по вычислительной математике я прочитал буквально следующее: "Навряд ли в мире найдется хотя бы две полностью корректных программы решения квадратных уравнений". Все, приведенные выше программы (и моя в т.ч.) - лишняя иллюстрация этой мысли... Ввод букв и нечисловых символов отсечь легко. А попробуйте решить, например, вот такое уравнение:

1020*x2+23x-1020

Что получится?
1
Neko101210
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 6
11.09.2012, 01:26 #11
Получается, для уравнения со степенью нужна отдельная программа. А как сделать, чтобы считывалось и вычислялось любое выражение? На форуме нашла про рекурсивный спуск, его можно применить в этом случае?
0
Catstail
Модератор
22640 / 11009 / 1785
Регистрация: 12.02.2012
Сообщений: 18,173
11.09.2012, 13:34 #12
Цитата Сообщение от Neko101210 Посмотреть сообщение
Получается, для уравнения со степенью нужна отдельная программа
- просто нужно понимать, что вычисление с плавающей точкой таит сюрпризы.

Вычислять произвольные выражения можно по-разному. В т.ч. и методом рекурсивного спуска.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 13:34
Привет! Вот еще темы с ответами:

Найти корни квадратного уравнения - C++
Найти корни квадратного уравнения вида ax2+bx+c=0 (относительно x). На вход программа получает три целых числа: a , b и c, соответственно....

Найти корни биквадратного уравнения - C++
Найти действительные корни биквадратного уравнения ax^4+bx^2+c=0 Входные данные Даны числа a, b и c Выходные данные Вывести...

Найти корни квадратного уравнения - C++
Задача: даны три числа a, b и с. При условии что a не равно 0 b^2 - 4ac &gt;= 0 найти корни квадратного уравнения и записать их в...

Найти корни квадратного уравнения - C++
Помогите решить. Найти корни квадратного уравнения y=ax2+bx+c, b– вводится с клавиатуры, a=3b-3, c=a-3b.


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
11.09.2012, 13:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru