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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 137, средняя оценка - 4.80
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
21.02.2011, 23:15     Метод половинного деления #1
Добрый вечер! значит так господа, помогите реализовать этакий метод вот в таком случае:

вводится число и надо вычислить его корень прибегая только к операторам деления и сравнения и вычитания.

вот что я накалякал:

C++
1
2
3
4
5
6
7
8
9
10
11
double a=0, b, c, EPS;
cout <<"ВВЕДИТЕ ЧИСЛО И СЛЕДОМ ПОГРЕШНОСТЬ: "<<endl;
cin >> b >> EPS;
 
do 
{
c = (a+b)/2;
c*c > b ? b = c : a = c;
 while (c >= EPS)
}
cout <<"OTVET: "<<C;
так вот я уже на столько запутался.. что у меня вообще вычисляет не то.. помогите )
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
name?
 Аватар для name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 368
Завершенные тесты: 1
21.02.2011, 23:56     Метод половинного деления #2
а чему b i с ровно?
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
21.02.2011, 23:58  [ТС]     Метод половинного деления #3
name?,
name?
 Аватар для name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 368
Завершенные тесты: 1
22.02.2011, 00:16     Метод половинного деления #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
#include <iostream.h>
#include <math.h>
 
 
double f(double x)
{
   тут твоя функцыя
}
 
int main()
{
    double a, b, c,e;
    a = 0;
cin>>b;
cin>>e;
    while (b - a > e){
        c = (a + b) / 2;
        if(f(b) * f(c) < 0)
            a = c;
        else
            b = c;
    }
    cout << (a + b) / 2 << endl;
    return 0;
}
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
22.02.2011, 00:35  [ТС]     Метод половинного деления #5
name?, дело в том что у меня нет функции. у меня есть число например 8. надо с помощью дихотомии найти корень.

8/2 = 4;
4*4 > 8.
->
a=0;
b=4;
c = 4/2 = 2;
2*2 < 4;

a = 2;
b = 4;
c = 6/2 = 3;
3*3 > 8
->
3+2 / 2 = 2.5
2.5*2.5 < 8 или хз больше..я уже запустался..но суть в этом.. именно число.


а твой пример я видел уже много раз и на паскале и на всех языках других.. и еще. нужно написать так чтоб было без всяких Погрешностей EPS. а просто с помощью цикла FOR т.е. по отпределенному количеству итерации(делений)

Добавлено через 5 минут
все кароче..я сам разобрался.. вот кому то если будет интересно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
 
{
     double a, b, c, a1;
     int i;
     a = 0;
     cin >> b;
     a1 = b;
     cin >> i;
     for(int j=0; j < i; j++)
     {
          c = (a+b)/2;
          c * c > a1 ? b = c : a = c;
     }
     cout << c;
     getch();
     return 0;
:D
}
name?
 Аватар для name?
198 / 169 / 18
Регистрация: 01.06.2010
Сообщений: 368
Завершенные тесты: 1
22.02.2011, 01:24     Метод половинного деления #6
Может так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream.h>
#include <math.h>
#include <conio.h>
int main()
{
clrscr();
double c,d=0,e;
int a;
cin>>a;
cin>>e;
c=a/2;
do
{
d=0.5*(a/c+c);
if ((d-c>e)|| (c-d>e))
c=d;
else break;
 
}while (d-c<e);
cout<<d;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 23:24     Метод половинного деления
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Гаджимурад
0 / 0 / 0
Регистрация: 08.12.2013
Сообщений: 2
08.12.2013, 23:24     Метод половинного деления #7
Запускал в Dev-C++
#include <iostream>
using namespace std;
#include <math.h>
float mpd(float x) // functions mpd - "metod polovinnogo deleniya"
{
return (3*cos(2*x+4));
}
int main()
{
setlocale(0, "");
float a,b,e,x; int k=0;
cout<<"1. y=3*cos(2*x+4)\n";
cout<<"Левая граница a=";
cin>>a;
cout<<"Правая граница b=";
cin>>b;
cout<<"Точность e=";
cin>>e;
x=(a+b)/2;
cout<<"Корень уравнения:"<<x;
while(fabs(b-a)>e)
{
if(mpd(a)*mpd(x)<=0) b=x;
else a=x;
x=(a+b)/2;
k++;
cout<<"\nТочность: "<<fabs(b-a)<<" Итерация №="<<k<<" Корень уравнения: "<<x;
}
cout<<"\nКоличество итераций ="<<k<<"\nКорень уравнения: "<<x;
return 0;
}
Yandex
Объявления
08.12.2013, 23:24     Метод половинного деления
Ответ Создать тему
Опции темы

Текущее время: 13:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru