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));
Дата добавления: 2015-10-19; просмотров: 1097;