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();
}
}