{
float x, y, c, fx, fy, fc;
fx = (*f)(x);
fy = (*f)(y);
if (fx * fy > 0.0)
{
puts(“Неверный интервал!”);
return -1; // аварийное завершение программы
}
do
{
c = (y – x)/2.0; // центр интервала
fc = (*f)(c); // значение функции в нем
if (fc * fx > 0.0)
{
x = c;
fx = fc;
}
Else
{
y = c;
fy = fc;
}
}
while ((fc!=0.0) && (fabs(y-x) > eps));
return c;
}
Полный вид программы:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
typedef float (*point_func)(float); // новый тип данных -
// указатель на функцию
// вещественного типа
float test_func(float x);
float root(point_func f, float a, float b, float eps);
Int main()
{
float left, right, tochn, koren;
printf(“\n левая граница интервала:”);
scanf(“%f”, &left);
printf(“\n правая граница интервала:”);
scanf(“%f”, &right);
if (left >= right)
{
puts(“Error!”);
return -1; // аварийное завершение программы
}
printf(“\n точность вычислений:”);
scanf(“%f”, &tochn);
printf(“\n”);
koren = root(test_func, left, right, tochn);
printf(“\n корень функции в заданном интервале = %3.5f”, koren);
return 0;
}
Float test_func(float x)
{
return x*x–1.0;
}
Float root(point_func f, float a, float b, float eps)
{
float x, y, c, fx, fy, fc;
fx = (*f)(x);
fy = (*f)(y);
if (fx * fy > 0.0)
{
puts(“Неверный интервал!”;
return -1; // аварийное завершение программы
}
do
{
c = (y–x)/2.0; // центр интервала
fc = (*f)(c); // значение функции в нем
if (fc * fx > 0.0)
{
x = c;
fx = fc;
}
Else
{
y = c;
fy = fc;
}
}
while ((fc!=0.0) && (fabs(y-x) > eps));
return c;
}
Работа программы:
Левая граница интервала:0.0
Правая граница интервала:2.0