Загрузка данных


using System;

class Program
{
    static int kScan = 0;   // счётчик итераций сканирования
    static int kHalf = 0;   // счётчик итераций половинного деления

    // функция варианта 19
    static double f(double x)
    {
        return Math.Cos(2 * x * x + 3) + 10 * x;
    }

    // метод сканирования
    static double Scan(double a, double b, double e)
    {
        double x1 = a;
        double x2 = x1 + e;
        double c = 0;

        while (x2 <= b)
        {
            kScan++;
            if (f(x1) * f(x2) < 0)
            {
                c = (x1 + x2) / 2;
                break;
            }
            x1 = x2;
            x2 = x1 + e;
        }
        return c;
    }

    // метод половинного деления
    static double Half(double a, double b, double e)
    {
        double c = 0;

        while (b - a > e)
        {
            kHalf++;
            c = (a + b) / 2;
            if (f(a) * f(c) < 0)
                b = c;
            else
                a = c;
        }
        return (a + b) / 2;
    }

    static void Main()
    {
        double a = 0;
        double b = 1;
        double e = 0.0001;

        // проверка условия теоремы Больцано-Коши
        if (f(a) * f(b) > 0)
        {
            Console.WriteLine("На отрезке нет корня");
            return;
        }

        double x1 = Scan(a, b, e);
        double x2 = Half(a, b, e);

        Console.WriteLine("Метод сканирования: x = " + x1 + ", итераций: " + kScan);
        Console.WriteLine("Метод половинного деления: x = " + x2 + ", итераций: " + kHalf);

        Console.ReadLine();
    }
}