Поиск корня уравнения методом деления пополам - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. int popolam(double a,double b,double *c,double eps,double(*f)(double x));
  4. int sgn (double x);
  5. int main(void)
  6. { double eps,c,x,a,b;
  7.  
  8. printf("a=");
  9. scanf("%le",&a);
  10. printf("b=");
  11. scanf("%le",&b);
  12. printf("eps=");
  13. scanf("%le",&eps);
  14. c=(a+b)/2;
  15. x=popolam(a,b,&c,eps,sin);
  16. printf("x=%le",x);
  17. return 0;
  18. }
  19. int popolam(double a,double b,double *c,double eps,double(*f)(double x))
  20. {double zc,za,zb,x, m=0;
  21. za=f(a);
  22. zb=f(b);
  23. zc=f(*c);
  24. if (sgn(za)==sgn(zb)) return 5;
  25. while(fabs(b-a)>eps)
  26. { *c=(a+b)/2;
  27. zc=f(*c);
  28. if (sgn(za)==sgn(zc))
  29. {a=*c; za=zc;}
  30. if (sgn(zb)==sgn(zc))
  31. {b=*c; zb=zc;}
  32. if (fabs(b-a)<eps) {x=*c;break;}
  33. }
  34. if(za==m) {x=a;}
  35. if(zb==m) {x=b;}
  36. return x;
  37. }
  38.  
  39. int sgn (double x)
  40. {double m=0;
  41. if (x>m) return 1;
  42. if (x<m) return -1;
  43. }
программа показывает для функции синуса значение корня не верно. ошибку найти не могу. можете помочь?

Решение задачи: «Поиск корня уравнения методом деления пополам»

textual
Листинг программы
  1. signed char sgn (double x)
  2. {
  3.     return x> 0 ? 1:(x == 0 ? 0 :-1) ;
  4. };

Объяснение кода листинга программы

В данном коде определен простейший тест на знак числа, в котором используется функция sgn, принимающая на вход число типа double и возвращающая знак этого числа (1, если число положительное; 0, если число равно нулю; -1, если число отрицательное). Далее, представлен код для поиска корня уравнения методом деления пополам. Входным параметром функции является число типа double, представляющее собой значение, от которого необходимо найти корень.

  1. Начинаем с определения функции с именем sqrt, которая будет выполнять поиск корня уравнения методом деления пополам.
  2. Используем цикл while, который будет выполняться до тех пор, пока значение переменной x не станет равным нулю.
  3. Внутри цикла определяем значение переменной y как сумму двух одинаковых чисел, причем первое слагаемое равно x, а второе - это значение переменной y, умноженное на два.
  4. Затем, используя операцию деления, получаем новое значение переменной x, равное старым значениям переменной y.
  5. После выполнения цикла, возвращаем значение переменной x как результат работы функции. Пример вызова функции sqrt: double x = -25; double sqrt_x = sqrt(x); Здесь мы вызываем функцию sqrt с аргументом x, равным -25. Результатом выполнения функции будет значение переменной sqrt_x, равное корню из -25, то есть 5.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы