fork(1) download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int sign(double x);
  5. double shaq(double x);
  6. double my_exp(double x);
  7.  
  8. int funci;
  9.  
  10. int root_half(double a, double b, double (*f)(double), double eps)
  11. {
  12. double c; int chislo=0;
  13. if (sign(f(a))==sign(f(b))) {printf("Метод не применим\n");return 0;}
  14. do
  15. {
  16. c=(a+b)/2.0;
  17. if(sign(f(c))==0){funci++; printf("Корень: %lf\n",c);break;}
  18. else
  19. if(sign(f(a))==sign(f(c))){printf("Корень: %lf\n",c);a=c;}
  20. else
  21. {printf("Корень: %lf\n",c);b=c;}
  22. chislo++;
  23. }
  24. while ( fabs(b-a)>=eps);
  25. printf("Количество итераций: %d\n Количество Вычислений функций:%d\n",chislo,funci);
  26. return 0;
  27. }
  28.  
  29. int sign(double x){
  30. if(x>0)return 1;
  31. else
  32. if(x<0)return -1;
  33. else if(x==0)return 0;
  34. return 0;
  35. }
  36.  
  37. int main(void)
  38. {
  39. double a,b,f(double),eps=0.01;
  40. scanf("%le %lf",&a,&b);
  41. root_half(a,b,&f,eps);
  42. return 0;
  43. }
  44.  
  45. double f( double x)
  46. {
  47. ++funci;
  48. return x*x*x -2*x*x+3;
  49. }
  50.  
Success #stdin #stdout 0s 5568KB
stdin
-10 10
stdout
Корень: 0.000000
Корень: -5.000000
Корень: -2.500000
Корень: -1.250000
Корень: -0.625000
Корень: -0.937500
Корень: -1.093750
Корень: -1.015625
Корень: -0.976562
Корень: -0.996094
Корень: -1.005859
Количество итераций: 11
 Количество Вычислений функций:35