Большой Воронежский Форум
» Программирование>помогите с методом
alex_bas 18:13 17.07.2007
Есть такой метод:

как мне им воспользоваться (к нему обратиться)?


/************************************************** *********************
This code is generated by the AlgoPascal translator

This code is distributed under the ALGLIB license
(see http://www.alglib.net/copyrules.php for details)
************************************************** *********************/
/*
This routines must be defined by the programmer:
static double f(double x)
*/


/************************************************** ***********************
Интегрирование методом прямоугольников с оценкой точности.

Считается интеграл функции F на отрезке [a,b] с погрешностью
порядка Epsilon.

function IntegralRect(a:Real;b:Real;Epsilon:real):real;
************************************************** ***********************/
public static double integralrect(double a,
double b,
double epsilon)
{
double result = 0;
int i = 0;
int n = 0;
double h = 0;
double s1 = 0;
double s2 = 0;


n = 1;
h = b-a;
s2 = h*f((a+b)/2);
do
{
n = 2*n;
s1 = s2;
h = h/2;
s2 = 0;
i = 1;
do
{
s2 = s2+f(a+h/2+h*(i-1));
i = i+1;
}
while( i<=n );
s2 = s2*h;
}
while( Math.Abs(s2-s1)>3*epsilon );
result = s2;
return result;
} [Ответ]
Part!zan 18:19 17.07.2007
А куда он входит, если это метод? С виду - обычная функция. Только public зачем-то. [Ответ]
Maximus007 19:07 17.07.2007
Вроде обычная функция. Куда она входит? [Ответ]
alex_bas 19:43 17.07.2007
в том то и дело что он никуда не входит( Он приведён в качестве алгоритма для вычисления интеграла. Вроде как к нему можно каким-то образом обратиться. Если взять подобный метод
/************************************************** *********************
This code is generated by the AlgoPascal translator

This code is distributed under the ALGLIB license
(see http://www.alglib.net/copyrules.php for details)
************************************************** *********************/
/************************************************** ***********************
Функция ищет наибольший общий делитель двух
чисел алгоритмом Евклида.
Алгоритм, кроме поиска НОД двух целых чисел
a,b также находит величины x,y, такие что
ax+by=НОД(a,b).
************************************************** ***********************/
public static void extgcd(int a,
int b,
ref int gcd,
ref int x,
ref int y)
{
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 0;
int q = 0;
int r = 0;
int sa = 0;
int sb = 0;


if( b!=0 & a!=0 )
{
x2 = 1;
x1 = 0;
y2 = 0;
y1 = 1;
sa = Math.Sign(a);
sb = Math.Sign(b);
a = Math.Abs(a);
b = Math.Abs(b);
while( b>0 )
{
q = a/b;
r = a-q*b;
x = x2-q*x1;
y = y2-q*y1;
a = b;
b = r;
x2 = x1;
x1 = x;
y2 = y1;
y1 = y;
}
gcd = a;
x = sa*x2;
y = sb*y2;
}
else
{
gcd = 0;
x = 0;
y = 0;
}
}
то обращение к нему делается так:
int a=169;
int b=544;
int gcd =0;
int x=0;
int y=0;

extgcd(a, b, ref gcd, ref x, ref y);

вывод результата:

Console.WriteLine("x={0} y= {1} gcd = {2}", x,y,gcd);

а как обратиться к вышеуказанному методу непонятно(
Точнее непонятно что такое f. Похоже что с помощью f задаётся каким-то образом подинтегральное выражение. Вот каким образом оно задаётся я не понимаю [Ответ]
alex_bas 20:16 17.07.2007
разобрался, надо такой конструктор создавать:
static double f(double x)
{
x = 2*x; // здесь прописывается подинтегральное выражение
return x;

}

результат выполнения метода получаем следующим образом:
c = integralrect(a, b, epsilon);
Console.WriteLine("Решение интеграла", c); [Ответ]
Kikoz 07:39 18.07.2007
Только при чем здесь конструктор? [Ответ]
alex_bas 08:25 18.07.2007
Чтобы обратиться к этому методу необходимо задать не только пределы интегрирования, но и предоставить методу подинтегральное выражение в виде функции f. Вот эту функцию и приходиться задавать с помощью конструктора.
Если короче, то в методе не выполнены условия инкапсуляции поэтому приходиться всё делать через жопу. [Ответ]
Kikoz 12:00 18.07.2007
про то что f - подинтергальная ф-ия - это я понял. Я просто не понял, где там конструктор Я так понял, он за рамками данного кода [Ответ]
alex_bas 18:30 18.07.2007
Да, конструктор надо создавать самому( [Ответ]
Вверх