Задание:
Листок с заданиями писал(а):
В следующих задачах требуется оформить решение в виде функции, получающей в качестве параметра указатель на функцию
double (*f)(double x).
Листок с заданиями писал(а):
Вычислить корень уравнения
на данном отрезке с заданной точностью
методом хорд (секущих). Сравнить с точным ответом.
Предполагалось, что преподаватель будет проверять на
на отрезке
с точностью
(и этот тест после небольшой поправки, учитывающей деление на ноль, программа стала проходить). Но теперь нужно, чтобы всё работало для произвольной в разумных пределах функции, то есть для
, например. Если непосредственно в main'е заменить
на
, то компилятор выдаёт ошибку
Компилятор писал(а):
1.1.3.c: In function ‘main’:
1.1.3.c:36:5: error: invalid operands to binary * (have ‘int’ and ‘__attribute__((const)) double (*)(double)’)
f=2*sin+1;
Так как кроме предыдущего семестра у меня больше не было опыта программирования, гугление мне не помогло, поэтому я решил обратиться сюда (и на cyberforum).
Что означает эта ошибка? Как её можно исправить?
Текст программы:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double function(double a, double b, double eps, double (*f)(double x));
double function(double a, double b, double eps, double (*f)(double x))
{
double R=0;
int i=0;
printf("BBeDute eps:\n");
scanf("%lf", &eps);
printf("BBeDute rpaHuubI\n");
scanf("%lf%lf", &a, &b);
while(fabs(b-a)>eps)
{
if(fabs(f(a)-f(b))<0.0000001)
break;
a=b-(b-a)*f(b)/(f(b)-f(a));
b=a-(a-b)*f(a)/(f(a)-f(b));
i=i+1;
}
R=b;
printf("uTepaLIuu:%d\n", i);
return R;
}
int main(void)
{
double R=0;
double a=0;
double b=0;
double d=0;
double eps=0;
double (*f)(double x);
f=sin;
R=function(a, b, eps, f);
d=3.14159265359-R;
printf("Pa3Huua c To4HbIm otBetom: %e\n", d);
printf("x=%lf\n", R);
return 0;
}