Практикум по курсу "Объектно-ориентированное программирование" на языке C#. Андрианова А.А - 28 стр.

UptoLike

27
case 1:
// инициализация делегата функцией GetX2
method = GetX2;
Console.WriteLine("Выбран метод хорд");
break;
case 2:
// инициализация делегата функцией GetX3
method = GetX3;
Console.WriteLine("Выбран метод касательных");
break;
}
}
// получение середины отрезка
static double GetX1(Function f, double a, double b)
{
return (a + b) / 2;
}
// получение точки пересечения хорды с осью OX
static double GetX2(Function f, double a, double b)
{
return a - f(a) * (b - a) / (f(b) - f(a));
}
// получение точки пересечения касательной с осью OX
static double GetX3(Function f, double a, double b)
{
// приближенное вычисление производной в точке a
double fa = (f(a + 0.001) - f(a)) / 0.001;
if (fa != 0)
{
// получение точки пересечения касательной
// с осью абсцисс
double c = a - f(a) / fa;
// если точка c принадлежит отрезку,
// выбираем ее
if (a <= c && c <= b)
return c;
}
// приближенное вычисление производной в точке b
double fb = (f(b + 0.001) - f(b)) / 0.001;
if (fb != 0)
{
// получение точки пересечения касательной
// с осью абсцисс
double c = b - f(b) / fb;
if (a <= c && c <= b)
return c;
}
             case 1:
                // инициализация делегата   функцией GetX2
                method = GetX2;
                Console.WriteLine("Выбран   метод хорд");
                break;
             case 2:
                // инициализация делегата   функцией GetX3
                method = GetX3;
                Console.WriteLine("Выбран   метод касательных");
                break;
         }
     }

     // получение середины отрезка
     static double GetX1(Function f, double a, double b)
     {
         return (a + b) / 2;
     }

     // получение точки пересечения хорды с осью OX
     static double GetX2(Function f, double a, double b)
     {
         return a - f(a) * (b - a) / (f(b) - f(a));
     }

     // получение точки пересечения касательной с осью OX
     static double GetX3(Function f, double a, double b)
     {
        // приближенное вычисление производной в точке a
        double fa = (f(a + 0.001) - f(a)) / 0.001;
        if (fa != 0)
        {
           // получение точки пересечения касательной
           // с осью абсцисс
           double c = a - f(a) / fa;
           // если точка c принадлежит отрезку,
           // выбираем ее
           if (a <= c && c <= b)
              return c;
        }

         // приближенное вычисление производной в точке b
         double fb = (f(b + 0.001) - f(b)) / 0.001;
         if (fb != 0)
         {
            // получение точки пересечения касательной
            // с осью абсцисс
            double c = b - f(b) / fb;
            if (a <= c && c <= b)
               return c;
         }

27