Как передать выражение как переменную в функцию?
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
float x_n=-1.2, x_k=-0.5, epsilon;
void metodpoldil(float a, float b, float eps){
float sum, x;
if ((a*a*a*a+0.2*a*a*a-0.4*a*a-1.4*a-1.2)==0){
printf("%f", a);
}
else if((b*b*b*b+0.2*b*b*b-0.4*b*b-1.4*b-1.2)==0){
printf("%f", b);
}
while (b-a>eps){
sum=(b-a)/2;
x=a+sum;
if ((a*a*a*a+0.2*a*a*a-0.4*a*a-1.4*a-1.2)!=(x*x*x*x+0.2*x*x*x-0.4*x*x-1.4*x-1.2)){
b=x;
}
else{
a=x;
}
}
printf("The x is %f", x);
}
int main() {
printf("Epsilon = ");
scanf("%f", &epsilon);
metodpoldil(x_n, x_k, epsilon);
return 0;
}
Код вычисляет с точностью до Epsilon x, в интервале [-1.2, -0.5], методом половинного деления. Как мне передать в мою функцию metodpoldil, как параметр, вот такое выражение: f(x)=x^4+0.2x^3-0.4x^2-1.4^x-1.2=0?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Как-то так:
double f(double a)
{
return (((a+0.2)*a-0.4)*a-1.4)*a-1.2;
}
void metodpoldil(double (*func)(double), double a, double b, double eps){
double sum, x;
if (func(a) == 0){
printf("%f", a);
}
else if(func(b) == 0){
printf("%f", b);
}
while (b-a>eps){
sum=(b-a)/2;
x=a+sum;
if (func(a) != func(x)){
b=x;
}
else{
a=x;
}
}
printf("The x is %lf", x);
}
int main() {
printf("Epsilon = ");
scanf("%lf", &epsilon);
metodpoldil(f, x_n, x_k, epsilon);
return 0;
}
О том, верно ли и эффективно ли работает весь ваш код — ничего не говорю, не смотрел. Отвечаю только на вопрос, как передать функцию в функцию...