Программа
#include <stdio.h>
#include <stdlib.h>
float F(float a, float b, float c, float d, float X)
{ return ((a*X+b)*X+c)*X+d; } /* Функция вычисления значения полинома в X */
int Sign(float a) /* Функция получения знака аргумента */
{ return (a>0)?(1):((a==0)?(0):(-1)); }
float GetRoot(float a, float b, float c, float d)
/* Функция поиска корня уравнения */
{ float l,r; /* Переменные определяющие левую и правую границы интервала
локализации корня */
float m; /* Средняя точка интервала*/
int SignFm; /* Знак функции в средней точке интервала */
r=1; /* Начальное определение интервала (правой границы) */
while (Sign(F(a,b,c,d,-r))==Sign(F(a,b,c,d,r))) r=r*1.1;
/* Цикл расширения интервала до локализации корня */
l=-r; /* Определение левой границы интервала локализации корня */
while (r-l>0) /* Цикл сужения интервала локализации корня */
{ m=(r+l)/2; /* Вычисление средней точки интервала локализации корня */
if (((SignFm=Sign(F(a,b,c,d,m)))==0)||(((l==m)||(m==r)))) r=l=m; /* Проверка случайного нахождения корня */
else if (SignFm==Sign(F(a,b,c,d,l))) l=m; /* Выбор и переопределение интервала */
else r=m;
}
return (l+r)/2; /* Выход из функции */
}
PolinDiv(float *a, float *b, float *c, float *d, float X)
/* Функция понижения степени многочлена */
{ *d=(*c+X*(*b+*a*X));
*c=*b+*a*X;
*b=*a;
*a=0;
}
main()
{ float a,b,c,d; /* Коэффициенты уравнения */
float X1,X2,X3; /* Корни уравнения */
printf("\nВведите коэффициенты уравнения\n");
/* Ввод коэффициентов: */
printf("a="); scanf("%f",&a);
printf("b="); scanf("%f",&b);
printf("c="); scanf("%f",&c);
printf("d="); scanf("%f",&d);
X1=GetRoot(a,b,c,d); /* Вычисление первого корня */
printf("X1=%f F(%f)=%f\n",X1,X1,F(a,b,c,d,X1));
PolinDiv(&a,&b,&c,&d,X1); /* Понижение степени многочлена */
if (c*c-4*b*d<0) printf("Других действительных корней нет\n");
else { X2=GetRoot(a,b,c,d); /* Вычисление второго корня */
printf("X2=%f F(%f)=%f\n",X2,X2,F(a,b,c,d,X2));
PolinDiv(&a,&b,&c,&d,X2); /* Понижение степени многочлена */
X3=GetRoot(a,b,c,d); /* Вычисление третьего корня */
printf("X3=%f F(%f)=%f\n",X3,X3,F(a,b,c,d,X3));
}
}
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию