Старый 15.05.2011, 12:29   #1
GrandMaster
 
Регистрация: 09.07.2010
Сообщений: 16
Репутация: 0
По умолчанию Метод половинного деления (си++)

Всем привет. Делаю курсовую по вычислительной математике и надо написать программу. А именно "разработать алгоритм численного решения нелинейного уравнения методом половинного деления". Вроде как повезло с вариантом, тем легкая. Вот собственно код
Код:
#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;
Иначе выводить ошибку "В этом диапазоне нет корней или больше одного"Вот это и не получается. Не подскажите? спасибо
GrandMaster вне форума   Ответить с цитированием
Старый 15.05.2011, 15:36   #2
MotoR
 
Аватар для MotoR
 
Регистрация: 02.09.2010
Сообщений: 12
Репутация: 2
По умолчанию

Привет.
Я нашел вот здесь, если не ошибаюсь твою задачу
Здесь условия, которое ты написал нет (но возможно тебе виднее как должно быть), но его можно добавить примерно так:
Цитата:
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 = "В этом диапазоне нет корней или больше одного";
}
Я синтаксис С++ точно не знаю, но примерно должно быть так
MotoR вне форума   Ответить с цитированием
Старый 15.05.2011, 17:22   #3
GrandMaster
 
Регистрация: 09.07.2010
Сообщений: 16
Репутация: 0
По умолчанию

Мотор, это ты?))) Привет)
Цитата:
но возможно тебе виднее как должно быть
Да) там прога не полная)
Цитата:
Я синтаксис С++ точно не знаю, но примерно должно быть так
Спасибо, я тоже так думал, только не знал как выводить ошибку с текстом) сейчас попробую)
GrandMaster вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



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