Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
igor_m
0 / 0 / 5
Регистрация: 14.12.2014
Сообщений: 122
#1

Метод половинного деления - C++

01.02.2015, 00:24. Просмотров 1305. Ответов 3
Метки нет (Все метки)

необходимо было написать программу, которая отделяет корни уравнения методом половинного деления с погрешностью 0,0001. первый корень находится без проблем, не находится корень х=0. в чем тут ошибка?
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
#include <iostream>
#include <cmath>
using namespace std;
 
double f(double x)
{
    return (x*x + 4 * sin(x));
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "Решение уравнения x^2+4*sin(x)=0" << endl;
    double a, b, c = 0, e = 0.0001;
    cout << "Введите a: "; cin >> a;
    cout << "Введите b: "; cin >> b;
    if (a >= b)
    {
        cout << "b должно быть больше, чем a! Повторите ввод" << endl;
        cout << "Введите a: "; cin >> a;
        cout << "Введите b: "; cin >> b;
    }
    if (f(a)*f(b) < 0)
        while (abs(a - b) > e)
        {
        c = (a + b) / 2;
        if (f(a)*f(c) <= 0)
            b = c;
        else a = c;
        }
    else if (f(a)*f(b) != 0)
    {
        cout << "нет корней" << endl;
        exit(0);
    }
    else if (f(a) == 0)
        c = f(b);
    else c = f(a);
    cout << c << endl;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2015, 00:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Метод половинного деления (C++):

Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд
Разработать программу нахождения корней уравнения f(x) =0 на интервале с...

Метод половинного деления
Дана функция с промежутком. Нужно найти все корни на этом промежутке методом...

Метод половинного деления
Методом половинного деления найти решение следующих нелинейных уравнений с...

Метод половинного деления
Помогите мне! У меня не вычисляет корень вообще #include &quot;stdafx.h&quot; #include...

Метод половинного деления
Не пойму в чем ошибка, поскажите:wall: #include &lt;math.h&gt; #include &lt;iostream&gt;...

Метод половинного деления
Метод половинного деления для функции x^2-3*sin(x)=0; Корнями должны быть -1.7...

3
KolodeznyDiver
2491 / 1635 / 203
Регистрация: 01.06.2013
Сообщений: 3,330
Записей в блоге: 7
01.02.2015, 00:54 #2
Лучший ответ Сообщение было отмечено igor_m как решение

Решение

Я ввёл в Вашу программу a=-1.0, b=1.0 и она выдала -6.10352e-05 - правильно.
Может а задавали меньше первого корня -1.93375 ?
0
ValeryS
Модератор
7124 / 5392 / 669
Регистрация: 14.02.2011
Сообщений: 18,200
01.02.2015, 01:00 #3
так на вскидку, вижу ошибку ввода
Цитата Сообщение от igor_m Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
    cout << "Введите a: "; cin >> a;
    cout << "Введите b: "; cin >> b;
    if (a >= b)
    {
        cout << "b должно быть больше, чем a! Повторите ввод" << endl;
        cout << "Введите a: "; cin >> a;
        cout << "Введите b: "; cin >> b;
    }
и что ? а если я опять введу неправильно? программа продолжит работать с неправильными данными
нужно зациклить ввод
например так
C++
1
2
3
4
5
6
7
8
 do
{
     
        cout << "Введите a: "; cin >> a;
        cout << "Введите b: "; cin >> b;
      if(b>a) break;
      cout << "b должно быть больше, чем a! Повторите ввод" << endl;
    }while(true);
соответственно строчки 15 16 убрать
Цитата Сообщение от igor_m Посмотреть сообщение
первый корень находится без проблем, не находится корень х=0
но по моему у тебя выводится только один корень c

или я что то не так понял
0
Al@x
Заблокирован
01.02.2015, 15:24 #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
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define pi 3.14
 
double f(double x) {
 
    return   x*x-(cos(pi*x));
}
int main() {
    int n=0;
    double a,b,c,eps;
    cout<<"a="; cin>>a;
    cout<<"b="; cin>>b;
    cout<<"eps="; cin>>eps;
    do {
        c=(a+b)/2;
        if (f(c)*f(a)<=0) b=c;
        else a=c;
 
        n+=1;
 
    }
    while (fabs(a-b)>=eps);
        cout<<"c="<<c<<"\n";
        cout<<"n="<<n<<"\n";
        getch();
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2015, 15:24
Привет! Вот еще темы с решениями:

Метод половинного деления
Скажите почему не выводит &quot;c&quot; #include &lt;stdafx.h&gt; #define _USE_MATH_DEFINES...

Метод половинного деления
Уравнение: sin x − 2.3x = 2.8 на интервале от (-π до π)

Метод половинного деления
Добрый вечер! значит так господа, помогите реализовать этакий метод вот в таком...

метод половинного деления
дана f(x). дан отрезок на котором расположены положительные корни дана...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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