RDot: White Hat Security Community

RDot: White Hat Security Community (https://rdot.org/forum/index.php)
-   Software development (https://rdot.org/forum/forumdisplay.php?f=19)
-   -   Метод половинного деления (си++) (https://rdot.org/forum/showthread.php?t=1470)

GrandMaster 15.05.2011 12:29

Метод половинного деления (си++)
 
Всем привет. Делаю курсовую по вычислительной математике и надо написать программу. А именно "разработать алгоритм численного решения нелинейного уравнения методом половинного деления". Вроде как повезло с вариантом, тем легкая. Вот собственно код
Код:

#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, а потом уже выполнялась
Код:

c=(a+b)/2;
    if(f(b) * f(c) < 0)
    a = c;
    else
    b = c;

Иначе выводить ошибку "В этом диапазоне нет корней или больше одного"Вот это и не получается. Не подскажите? спасибо

MotoR 15.05.2011 15:36

Привет.
Я нашел вот здесь, если не ошибаюсь твою задачу
Здесь условия, которое ты написал нет (но возможно тебе виднее как должно быть), но его можно добавить примерно так:
Цитата:

double a,b,c,eps;
a = Edit1->Text.ToDouble();
b = Edit2->Text.ToDouble();
eps = Edit3->Text.ToDouble();
if (f(а)*f(b)<0) {
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;
}
else {
// Здесь как правильно будет точно не знаю
Label1->Text = "В этом диапазоне нет корней или больше одного";
}
Я синтаксис С++ точно не знаю, но примерно должно быть так

GrandMaster 15.05.2011 17:22

Мотор, это ты?))) Привет)
Цитата:

но возможно тебе виднее как должно быть
Да) там прога не полная)
Цитата:

Я синтаксис С++ точно не знаю, но примерно должно быть так
Спасибо, я тоже так думал, только не знал как выводить ошибку с текстом) сейчас попробую)


Часовой пояс GMT +3, время: 22:53.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot