численные методы. решение нелинейных уравнений
leahov:
Помогите оформить задание сделанное в turbo c++. Нужно оформить его в форме и именно в билдере (ну такой вот бзик у препода :) ) Ниже привожу код
Код
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include <iostream.h>
float f(float x)
{
// return x*x*x + 3*x - 2;
return x*x*x + x - 5;
}
float fdx(float x)
{
// return 3*x*x +3;
return 3*x*x +1;
}
float fd2x(float x)
{
return 4*x;
}
float absolute(float x)
{
return x < 0 ? -x : x;
}
void chordes(float a, float b, float eps)
{
if(f(a)*f(b) < 0)
{
cout << "Chordes: a i b nepravilnye";
return;
}
float x0 = a;
float xf = b;
if(f(a)*fd2x(a) > 0)
{
x0 = b;
xf = a;
}
int step = 1;
float x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
while(absolute(x1-x0) > eps)
{
x0 = x1;
x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
step = step + 1;
}
cout << "Chordes: x: " << x1 << "\nf(x): " << f(x1) << "\nsteps:" << step;
}
void sek(float a, float b, float eps)
{
if(f(a)*f(b) < 0)
{
cout << "Sekush: a i b nepravilnye";
return;
}
float x0 = a;
float x1 = a + eps;
if(f(a)*fd2x(a) < 0)
{
x0 = b;
x1 = b - eps;
}
int step = 1;
float x = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
x0 = x1;
x1 = x;
while(absolute(x1-x0) > eps)
{
x = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
x0 = x1;
x1 = x;
step = step + 1;
}
cout << "Sek: x: " << x1 << "\nf(x): " << f(x1) << "\nsteps:" << step;
}
void kasat(float a, float b, float eps)
{
if(f(a)*f(b) < 0)
{
cout << "Sekush: a i b nepravilnye";
return;
}
float x0 = a;
if(f(a)*fd2x(a) < 0)
{
x0 = b;
}
int step = 1;
float x1 = x0 - f(x0)/fdx(x0);
while(absolute(x1-x0) > eps)
{
x0 = x1;
x1 = x0 - f(x0)/fdx(x0);
step = step + 1;
}
cout << "Kasat: x: " << x1 << "\nf(x): " << f(x1) << "\nsteps:" << step;
}
void main()
{
float a, b, eps;
cout << "Vvedite a, b, epsilon: ";
cin >> a >> b >> eps;
chordes(a, b, eps);
sek(a, b, eps);
//kasat(a, b, eps);
}// end main()
Помогите это оформить в билдере
AVC:
Builder 5. Консольное приложение.
leahov:
Цитировать
Автор: AVC
Цитата
Builder 5. Консольное приложение.
или я чего то не понял с архива, или я чего то не понял. Да, есть ошибка (не заметил), сейчас исправлю прямо здесь, но мне нужно визуально это оформит - чтоб форма, кнопочки, едиты и тд.
Edifier:
Создай проект и в нем нужные едиты для ввода a, b, eps. Потом кнопку рассчитать, на нее повесь вызов функций. Сами функции добавь в проект копи пастом.
Чтобы перенести функции, их нужно объявить в .h файле проекта, а потом в cpp описАть.
Это пример h файла:
Код:
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
float fdx(float x);
void chordes(float a, float b, float eps);
// и т.д.
};
А это пример cpp:
Код:
float TForm1::fdx(float x)
{
return 3*x*x +1;
}
void TForm1::chordes(float a, float b, float eps)
{
if(f(a)*f(b) < 0)
{
ShowMessage( "Chordes: a i b nepravilnye");
return;
}
float x0 = a;
float xf = b;
if(f(a)*fd2x(a) > 0)
{ x0 = b;
xf = a;
}
int step = 1;
float x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
while(absolute(x1-x0) > eps)
{ x0 = x1;
x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
step = step + 1; }
ShowMessage("Chordes: x: " + FloatToStr(x1) + "\nf(x): " +FloatToStr( f(x1)) + "\nsteps:" + FloatToStr(step));
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a, b, eps;
a = StrToFloat(Edit1->Text);
b = StrToFloat(Edit2->Text);
eps = StrToFloat(Edit3->Text);
//Edit1, Edit2, Edit3 это компоненты на форме, в которые вводятся a b и eps
chordes(a, b, eps);
sek(a, b, eps);
//kasat(a, b, eps);
}
AVC:
Цитата: leahov от 26 Ноябрь 2007, 17:28:01
или я чего то не понял но мне нужно визуально это оформит - чтоб форма, кнопочки, едиты и тд.
Ну так так и надо было писать. Я просто перегнал проект в билдер.
Навигация