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