ВУЗ:
Составители:
Рубрика:
72
// решение уравнения F(x) = 0 на отрезке [a; b]
// с точностью eps>0 методом деления отрезка пополам
public static double Root(double a, double b,
double eps, FunctionDelegate f)
{
// корень гарантировано существует,
// если на концах отрезка
// функция принимает значения различных знаков.
if(f(a) * f(b) > 0)
throw new Exception("Возможно, корней на этом
отрезке не существует");
// обеспечиваем выполнение условия:
// a – левый конец отрезка, b – правый
if(a > b)
{
double t = a;
a = b;
b = t;
}
// цикл метода деления отрезка пополам
while(b - a > eps)
{
double c = (a + b) / 2;
if(f(c) == 0)
return c;
if(f(a)*f(c) < 0)
b = c;
else
a = c;
}
return (a + b) / 2;
}
Как и все в С#, делегаты являются классами. В пространстве имен
System определены два класса: Delegate и MulticastDelegate. При
определении делегата в качестве базового компилятором назначается один из
этих классов в зависимости от типа возвращаемого значения: для типа void
базовым является MulticastDelegate, для остальных типов –
Delegate. Существенным отличием этих двух типов делегатов является
возможность сохранения в одном делегате типа MulticastDelegate
указателей сразу на несколько функций. Эти указатели хранятся в виде
списка, который называют списком вызова. При обращении к такому
делегату функции будут выполняться по очереди в порядке их помещения в
список вызова.
Добавить функцию в список вызова можно с помощью статического
метода Combine(), который сцепляет списки вызовов или массивы
// решение уравнения F(x) = 0 на отрезке [a; b]
// с точностью eps>0 методом деления отрезка пополам
public static double Root(double a, double b,
double eps, FunctionDelegate f)
{
// корень гарантировано существует,
// если на концах отрезка
// функция принимает значения различных знаков.
if(f(a) * f(b) > 0)
throw new Exception("Возможно, корней на этом
отрезке не существует");
// обеспечиваем выполнение условия:
// a – левый конец отрезка, b – правый
if(a > b)
{
double t = a;
a = b;
b = t;
}
// цикл метода деления отрезка пополам
while(b - a > eps)
{
double c = (a + b) / 2;
if(f(c) == 0)
return c;
if(f(a)*f(c) < 0)
b = c;
else
a = c;
}
return (a + b) / 2;
}
Как и все в С#, делегаты являются классами. В пространстве имен
System определены два класса: Delegate и MulticastDelegate. При
определении делегата в качестве базового компилятором назначается один из
этих классов в зависимости от типа возвращаемого значения: для типа void
базовым является MulticastDelegate, для остальных типов –
Delegate. Существенным отличием этих двух типов делегатов является
возможность сохранения в одном делегате типа MulticastDelegate
указателей сразу на несколько функций. Эти указатели хранятся в виде
списка, который называют списком вызова. При обращении к такому
делегату функции будут выполняться по очереди в порядке их помещения в
список вызова.
Добавить функцию в список вызова можно с помощью статического
метода Combine(), который сцепляет списки вызовов или массивы
72
Страницы
- « первая
- ‹ предыдущая
- …
- 70
- 71
- 72
- 73
- 74
- …
- следующая ›
- последняя »
