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

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

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

#include <stdio.h>
#include <math.h>
int popolam(double a,double b,double *c,double eps,double(*f)(double x));
int sgn (double x);
 
int main(void)
{ double eps,c,x,a,b;

printf("a=");
scanf("%le",&a);
 
printf("b=");
scanf("%le",&b);
 
printf("eps=");
scanf("%le",&eps);
 
c=(a+b)/2;
 
x=popolam(a,b,&c,eps,sin);
 
printf("x=%le",x);
return 0;
}
 
int  popolam(double a,double b,double *c,double eps,double(*f)(double x))
 
{double zc,za,zb,x, m=0;
  za=f(a);
  zb=f(b);
  zc=f(*c); 
 
if (sgn(za)==sgn(zb)) return 5;
while(fabs(b-a)>eps)
{ *c=(a+b)/2;
  zc=f(*c);
 
if (sgn(za)==sgn(zc)) 
    {a=*c; za=zc;}
if (sgn(zb)==sgn(zc)) 
    {b=*c; zb=zc;}
if (fabs(b-a)<eps) {x=*c;break;}
}
 
if(za==m) {x=a;}
if(zb==m) {x=b;}
return x;
 
}

int sgn (double x)
{double m=0;
if (x>m) return 1;
if (x<m) return -1;
}
программа показывает для функции синуса значение корня не верно. ошибку найти не могу. можете помочь?

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

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

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

В данном коде определен простейший тест на знак числа, в котором используется функция 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
Похожие ответы