Вообщем надо написать прогу, которая будет решать уравнение численным методом: т.е. при запуске она запрашивает отрезок от a до b и степень точности eps..... потом должна считать некую точку с=(а+b)/2 и взависимости от того f(a)*f(c)<=0? присваивать с либо и либо а.....тем самым сужая отрезок поиска корня......в момент когда fabs(f(c))<=0 должна выдавать С.
Проблемма в том что когда задаешь отрезок -4 до -3 и от -2 до -1 где собственно и нах. корни прога ВИСНИТ.....
в чем проблемма?
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
#include "math.h"
float root( float x)
{
return pow(x, 3.0)+pow(sin(x), 2.0)+pow((pow(x ,2.0)-5),2.0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a;
float b;
float eps;
float c;
float f_a, f_b, f_c;
float res;
float x;
a = StrToFloat(Edit1->Text);
b = StrToFloat(Edit2->Text);
eps = StrToFloat(Edit3->Text);
c=(a+b)/2;
x = a;
f_a = root(x);
x=c;
f_c=root(x);
x=b;
f_b=root(x);
if (f_a*f_b<=0)
{
while(fabs(f_c)>=eps)
{
if(f_a*f_c<=0)
b=c;
else
a=c;
}
res=c;
Label4->Caption = "Êîðåíü: " +
FloatToStrF(res,ffGeneral,7,2);
}
else
Label4->Caption = "Êîðíÿ íåò";
}
Проблемма в том что когда задаешь отрезок -4 до -3 и от -2 до -1 где собственно и нах. корни прога ВИСНИТ.....
в чем проблемма?
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
#include "math.h"
float root( float x)
{
return pow(x, 3.0)+pow(sin(x), 2.0)+pow((pow(x ,2.0)-5),2.0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a;
float b;
float eps;
float c;
float f_a, f_b, f_c;
float res;
float x;
a = StrToFloat(Edit1->Text);
b = StrToFloat(Edit2->Text);
eps = StrToFloat(Edit3->Text);
c=(a+b)/2;
x = a;
f_a = root(x);
x=c;
f_c=root(x);
x=b;
f_b=root(x);
if (f_a*f_b<=0)
{
while(fabs(f_c)>=eps)
{
if(f_a*f_c<=0)
b=c;
else
a=c;
}
res=c;
Label4->Caption = "Êîðåíü: " +
FloatToStrF(res,ffGeneral,7,2);
}
else
Label4->Caption = "Êîðíÿ íåò";
}