Программа на С++ поиск корня нелинейного уравнения методом половинного деления (дихотомии)

Составить программу на языке программирования С++ и блок-схему для решения следующей задачи: уточнить приближенное значение корня нелинейного уравнения f(x) = 0 на заданном отрезке [a,b]  методом половинного деления (дихотомии) с точностью ε = 0.001.

Уравнение имеет вид: x3 - 9x2  + 20x – 11=0              

Отрезок, на котором осуществляется поиск корня: [0; 1]

Блок-схема алгоритма поиска корня уравнения методом половинного деления (дихотомии)

Разработаем алгоритм программы поика решения уравнения на заданном отрезке в виде блок-схемы:

блок-схема алгоритма метод половинного деления

Текст программы решения задачи на С++

В среде программирования Borland C++ 7.0 вводим текст программы на Си ++:

#include <stdio.h>

#include <conio.h>
#include <math.h>
// функция для вычисления f(х)
float f(float z)
{
return pow(z,3)+6*pow(z,2)+6*z-7;//возвращаемое значение
}

// главная функция
void main()
{
float a=-3.0, b=2.0, e=0.001, x;// объявление переменных
while (fabs(a-b)>=e) // цикл
{
// проверка на разные знаки по концам отрезка
if((f(a)>0&&f((a+b)/2)<0)||(f(a)<0&&f((a+b)/2)>0))
b=(a+b)/2;
else
if ((f((a+b)/2)>0&&f(b)<0)||(f((a+b)/2)<0&&f(b)>0))
a=(a+b)/2;
else
{
printf("! Net kornej !");
return;
getch();
}
}

x=(a+b)/2;// вычисление х после завершения цикла
printf("x=%f F(x)=%f |a-b|=%f",x,f(x),fabs(a-b)); // вывод результатов
getch();
}

Нажимаем клавиши CTRL+F9 для компиляции и запуска на выполнение программы. Получаем  корень уравнения x≈0,834 :

результат программы на си метод половинного деления

Программа начинается с директив препроцессора, начинающихся с символа #, которые дают указание препроцессору подключить к программе заголовочные файлы с описанием тех или иных библиотечных функций. В данном случае подключается заголовочный файл stdio.h с описанием функций ввода-вывода, заголовочный файл math.h с описанием математических функций и заголовочный файл conio.h с описанием функции ожидания нажатия клавиши getch().

Программа состоит из двух функций: пользовательской функции f(x) и обязательной функции main(). Функция main() не возвращает никаких значений и поэтому она объявляется с ключевым словом void. В отличие от функции main(), функция f(x) возвращает вещественное значение и объявляется с ключевым словом float. Тела функций являются блоками и поэтому ограничены фигурными скобками.

В теле функции main() объявляются вещественные переменные a, b, e, х.
Далее используется оператор цикла while, в котором применяются условные операторы:
if (выражение) оператор 1; else оператор 2; которые позволяют проверить разные ли знаки у концов отрезка.
Использование вышеуказанной библиотечной функции printf() дает возможность вывести на стандартное устройство вывода (монитор) сообщение об отсутствии корней или сообщение с значением корня, значением функции в этой точке и модуль разности концов отрезка.
Тело функции main() зак¬рывается фигурной скобкой. На этом программа заканчивается.