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

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

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

Решение нелинейных уравнений. Метод половинного деления - C++

12.07.2012, 03:04. Просмотров 1245. Ответов 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 float a,b,e,c,x;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{ a=1;                     //ïðèñâГ*ГЁГўГ*Г*ГЁГҐ ïåðâîГ*î÷Г*ëüГ*ûõ Г§Г*Г*Г·ГҐГ*ГЁГ© êîìïîГ*ГҐГ*ГІГ*Г¬ Edit
  b=2;
  c=3;
  Edit1->Text="1";        
  Edit2->Text="2";
  Edit3->Text="3";
}
 
//---------------------------------------------------------------------------
  #include <iostream>
   #include <conio.h>
#include <math.h>
  using namespace std;
  double f(float x) {       //îáúÿâëåГ*ГЁГҐ ГґГіГ*ГЄГЁГЁ f(x)=sin(x)+x-1
 
    return   (sin(x))+x-1;}
      int main() {
        // êîðåГ*Гј ГіГ°Г*ГўГ*ГҐГ*ГЁГї
       float x;
       // ëåâГ*Гї ГЈГ°Г*Г*ГЁГ¶Г* îòðåçêГ*
       float a;
       // ГЇГ°Г*ГўГ*Гї ГЈГ°Г*Г*ГЁГ¶Г* îòðåçêГ*
       float b;
       // òî÷êГ* ïîñåðåäèГ*ГҐ îòðåçêГ*
       float c;
       // òî÷Г*îñòü
       float e;
          }
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        a=StrToFloat(Edit1->Text);   // ïåðåâîä Г¤Г*Г*Г*ûõ ñòðîêîâîãî ГІГЁГЇГ* Гў äåéñòâèòåëüГ*ûå Г·ГЁГ±Г«Г*
        b=StrToFloat(Edit2->Text);
        e=StrToFloat(Edit3->Text);
        while  (abs(f(a)-f(b))>e)    {    //îïåðГ*òîð öèêëГ* while, Г*Г*ГЄГ«Г*äûâГ*ГѕГ№ГЁГ© óñëîâèå, ÷òîáû ìîäóëü Г°Г*Г§Г*îñòè ГґГіГ*êöèè Г± Г§Г*Г*Г·ГҐГ*èÿìè Г* ГЁ b áûë ìåГ*ГјГёГҐ òî÷Г*îñòè
          c=(a+b)/2;                   // îïðåäåëåГ*ГЁГҐ òî÷êè, äåëÿùåé îòðåçîê ïîïГ*Г«Г*Г¬
           if (f(a)*f(c)<0)           //îïåðГ*òîð öèêëГ* if, Г*Г*ГЄГ«Г*äûâГ*ГѕГ№ГЁГ© óñëîâèå, ÷òîáû ïðîèçâåäåèå ГґГіГ*êöèè Г± Г§Г*Г*Г·ГҐГ*èÿìè Г* ГЁ Г± áûëî ìåГ*ГјГёГҐ Г*óëÿ
                  b=c;               //ïðèñâГ*ГЁГўГ*Г*ГЁГҐ ГЇГ°Г*âîé ГЈГ°Г*Г*èöû îòðåçêГ* òî÷êè Г±
                else                // êëþ÷åâîå ñëîâî else, ïåðåäГ*ГѕГ№ГҐГҐ ГіГЇГ°Г*âëåГ*ГЁГҐ ñëåäóþùåìó ïîñëå Г*ГҐГЈГ® îïåðГ*òîðó
                  a=c;}             // ïðèñâГ*ГЁГўГ*Г*ГЁГҐ ëåâîé ГЈГ°Г*Г*èöû îòðåçêГ* òî÷êè Г±
            x=c;                    //ïðèñâГ*ГЁГўГ*Г*ГЁГҐ Г§Г*Г*Г·ГҐГ*ГЁГѕ êîðГ*Гї òî÷êè Г±
            Edit4->Text=FloatToStr(x);     //ïîäГ*Г·Г* Г§Г*Г*Г·ГҐГ*ГЁГї êîðГ*Гї Г*Г* ôîðìó
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2012, 03:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Решение нелинейных уравнений. Метод половинного деления (C++):

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

Метод деления отрезка пополам для решения нелинейных уравнений (метод дихотомии) - C++
Здравствуйте. Помогите пожалуйста дописать программу. Вот что вымучал, но на сдаче завалили, типо нет вывода корней, не рассмотрены...

Решение нелинейных уравнений методом деления пополам - C++
Окажите помощь в переписи программы с языка паскаль на с++ для курсовой работы. Программа решает нелинейные уравнения методом деления...

Решение нелинейных уравнений методом деления отрезков пополам - C++
Здравствуйте ! Пытаюсь решить задачку на тему Решение нелинейных уравнений Методом деления отрезков пополам.. написал код для...

Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд - C++
Разработать программу нахождения корней уравнения f(x) =0 на интервале с точностью e = 0,001 (интервал или подобрать самостоятельно). При...

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

2
salam
174 / 155 / 17
Регистрация: 10.07.2012
Сообщений: 762
12.07.2012, 05:40 #2
если "руками" установить требуемую точность вывода и выводить ответ как число?
0
Masham
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 15
12.07.2012, 08:19  [ТС] #3
да, при любой точности ответ выдается 0,5
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 08:19
Привет! Вот еще темы с ответами:

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

Метод половинного деления - C++
Методом половинного деления найти решение следующего нелинейного уравнения с точностью е=0,01; e=0,001; e=0,0001; e=0,00001; e=0,000001. ...

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

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


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

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

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