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

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

Войти
Регистрация
Восстановить пароль
 
tyan
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 14
#1

[страуструп] задача на нахождение корней кв ур-я , проверьте пожалуйста - C++

06.12.2013, 17:03. Просмотров 393. Ответов 4
Метки нет (Все метки)

Здравствуйте, в книге Страуструпа "Основы и принципы программирования" есть задача на нахождение корней кв. ур-я, я её написал, но терминал выдает такое - http://puu.sh/5DQV0.png , я так понимаю , что проблема с типами double/int , может кто сказать что не так?

директива "std_lib_facilities.h" дана из книги, функция "keep_window_open" оттуда же

вот код:

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "../../std_lib_facilities.h"
 
int a;
int b;
int c;
double D;
 
 
// Нахождение дискриминанта
double reshaem_D()
{
    return D=(b^2)-(4*a*c);
}
 
// Нахождение 1го корня для дискриминанта > 0
double reshaem_D_polozh_1(double x)
{
    return x=((-b) + sqrt((b^2)-(4*a*a))) / (2*a);
}
 
// Нахождение 2го корня для дискриминанта > 0
double reshaem_D_polozh_2(double x)
{
    return x=((-b) - sqrt((b^2)-(4*a*a))) / (2*a);
}
 
// Нахождение корня для дискриминанта = 0
double reshaem_D_nol(double x)
{
    return x=(-b)/(2*a);
}
 
 
 
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    double x = 0;
    double D = 0;
 
    //Вводим a,b,c
    cout << "Uravnenie imeet vid: a*x^2 + b*x + c = 0, vvedite a,b,c dlya resheniya uravneniya" << endl;
    cout << "Vvedite a= "; cin>> a; cout << "Vvedite b= ";cin>> b; cout << "Vvedite c= ";cin>> c;
 
    //Вычисляем дискриминант 
    reshaem_D();
 
    //Проверяем дискриминант, D>0;D<0;D=0
    if (reshaem_D>0)
    {
        reshaem_D_polozh_1(x);
        reshaem_D_polozh_2(x);
        cout << "Korni uravneniya x1= " << reshaem_D_polozh_1(x) << " x2= " << reshaem_D_polozh_2(x) << endl;
    }
    else if (reshaem_D<0)
    {
        cout << "Net reshenii" << endl;
    }
    else if (reshaem_D==0)
    {
        reshaem_D_nol(x);
        cout << "Korni uravneniya x= " << reshaem_D_nol << endl;
    }
 
    keep_window_open();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 17:03     [страуструп] задача на нахождение корней кв ур-я , проверьте пожалуйста
Посмотрите здесь:

Задача:Страуструп. 4.11.4 - C++
1.Напишите программу,которая печатает символы от 'a' до 'z' и цифры от '0' до '9' и их целые значения. 2.Проделайте то же самое для...

Нахождение корней НУ в С++ - C++
Входными данными являются: 1. Диапазон поиска корней, т.е. минимальное и максимальное и значения х (например: от -1000 до 1000); 2....

Нахождение корней полинома n-ой степени - C++
Помогите пожалуйста с написанием алгоритма для нахождения корней полинома n-ой степени. Может поможет кому- название алгоритмов для...

Нахождение значения выражения для n корней - C++
Нахождение значения выражения для n корней. (с использованием рекурсии)

Нахождение комплексных корней методом Ньютона - C++
Нужно решить уравнение с комплексной переменной z^n +1 = 0. Код вроде написал,но ищет неверно корни.Помогите,пожалуйста. Заголовочный...

Нахождение корней квадратного и линейного уравнений - C++
Написать перегруженные шаблоны функций для нахождения корней линейного (а*х + b =0) и квадратного (a*x^2 + b*x +c=0) уравнений. Замечание в...

Нахождение корней квадратного уравнения через дискриминант - C++
Здравствуйте! Начинаю работать в C++ Builder 3.1 в DOSBOXe. Стоит задача реализовать программу нахождения корней квадратного уравнения...

Оператор цикла, нахождение суммы обратной прогрессии корней - C++
Не могу понять, как реализовать следующие вычисление с помощью цикла. Понимаю, что легче сделать это с помощью рекурсии, но задание по...

проверьте пожалуйста! - C++
Доброе утро!Хочу показать вам не проверку свое творение.Не запускается. Вот текст ошибки: g++.exe...

проверьте пожалуйста! - C++
не совсем уверен что правильно #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
06.12.2013, 17:06     [страуструп] задача на нахождение корней кв ур-я , проверьте пожалуйста #2
b^2 <---- не то.
b*b <---- то.
tyan
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 14
06.12.2013, 17:13  [ТС]     [страуструп] задача на нахождение корней кв ур-я , проверьте пожалуйста #3
Цитата Сообщение от Dani Посмотреть сообщение
b^2 <---- не то.
b*b <---- то.
Исправил, спасибо, но теперь такое - http://puu.sh/5DRxd.png
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
06.12.2013, 17:14     [страуструп] задача на нахождение корней кв ур-я , проверьте пожалуйста #4
Дискриминант находите в отдельной функции:
C++
1
2
3
4
5
// Нахождение дискриминанта
double reshaem_D()
{
    return D=(b^2)-(4*a*c);
}
В фунции для нахождения корней:
C++
1
2
3
4
5
6
7
8
9
10
11
// Нахождение 1го корня для дискриминанта > 0
double reshaem_D_polozh_1(double x)
{
    return x=((-b) + sqrt((b^2)-(4*a*a))) / (2*a);
}
 
// Нахождение 2го корня для дискриминанта > 0
double reshaem_D_polozh_2(double x)
{
    return x=((-b) - sqrt((b^2)-(4*a*a))) / (2*a);
}
лучше передать еще и второй аргумент - дискриминант, уже вычисленный, чтобы не переписывать, громоздкое выражение.
Вы его переписали, и как следствие допустили ошибку, дискриминант считается правильно как:
C++
1
D = b*b - 4*a*c;
а не, как у вас
C++
1
D = b*b - 4*a*a;
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
06.12.2013, 17:21     [страуструп] задача на нахождение корней кв ур-я , проверьте пожалуйста #5
Много ошибок в коде. Мне лень искать все ошибки, вот
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <cmath>
 
using namespace std;
 
int a;
int b;
int c;
double D;
 
 
// Нахождение дискриминанта
void reshaem_D()
{
    D = ((b*b)-(4*a*c));
}
 
// Нахождение 1го корня для дискриминанта > 0
double reshaem_D_polozh_1(double x)
{
    return ((-b) + sqrt((b*b)-(4*a*a))) / (2*a);
}
 
// Нахождение 2го корня для дискриминанта > 0
double reshaem_D_polozh_2(double x)
{
    return ((-b) - sqrt((b*b)-(4*a*a))) / (2*a);
}
 
// Нахождение корня для дискриминанта = 0
double reshaem_D_nol(double x)
{
    return x=(-b)/(2*a);
}
 
 
 
int main()
{
    double x = 0;
 
    //Вводим a,b,c
    cout << "Uravnenie imeet vid: a*x^2 + b*x + c = 0, vvedite a,b,c dlya resheniya uravneniya" << endl;
    cout << "Vvedite a= "; cin>> a; cout << "Vvedite b= ";cin>> b; cout << "Vvedite c= ";cin>> c;
 
    //Вычисляем дискриминант 
    reshaem_D();
 
    //Проверяем дискриминант, D>0;D<0;D=0
    if (D>0)
    {
        reshaem_D_polozh_1(x);
        reshaem_D_polozh_2(x);
        cout << "Korni uravneniya x1= " << reshaem_D_polozh_1(x) << " x2= " << reshaem_D_polozh_2(x) << endl;
    }
    else if (D<0)
    {
        cout << "Net reshenii" << endl;
    }
    else if (D==0)
    {
        reshaem_D_nol(x);
        cout << "Korni uravneniya x= " << reshaem_D_nol << endl;
    }
 
}
Yandex
Объявления
06.12.2013, 17:21     [страуструп] задача на нахождение корней кв ур-я , проверьте пожалуйста
Ответ Создать тему
Опции темы

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