Программа


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

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию