Метод половинного деления (си++)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by GrandMaster, 15 May 2011.

  1. GrandMaster

    GrandMaster Active Member

    Joined:
    16 May 2009
    Messages:
    107
    Likes Received:
    114
    Reputations:
    25
    Всем привет. Делаю курсовую по вычислительной математике и надо написать программу. А именно "разработать алгоритм численного решения нелинейного уравнения методом половинного деления". Вроде как повезло с вариантом, тем легкая. Вот собственно код
    Code:
    #include <vcl.h>
    #include <math.h>
    #pragma hdrstop
    #include "sourcecode.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TMainForm *MainForm;
     
    double f(double x)
    {
        return pow(x,2)-4*x-10;
    }
    //---------------------------------------------------------------------------
    __fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TMainForm::Button1Click(TObject *Sender)
    {
    double a,b,c,eps;
    a = Edit1->Text.ToDouble();
    b = Edit2->Text.ToDouble();
    eps = Edit3->Text.ToDouble();
     
    while (fabs(a-b)>=eps){
        c=(a+b)/2;
        if(f(b) * f(c) < 0)
        a = c;
        else
        b = c;
    }
    Edit4->Text = (a + b) / 2;
    }
    Но нужно добавить условие, чтоб когда юзер вводит a и b, то проверялось условия f(а)*f(b)<0, а потом уже выполнялась
    Code:
     c=(a+b)/2;
        if(f(b) * f(c) < 0)
        a = c;
        else
        b = c;
    Иначе выводить ошибку "В этом диапазоне нет корней или больше одного"Вот это и не получается. Не подскажите? спасибо