2015-12-02 3 views
-1

разложение в ряд Тейлора сов (х) с заданной точностьюКак исправить мой код?

EPS Рекурсивный подход

[Ошибка] перегруженной функции без информации контекстуальной типа

Как может Я исправляю эту ошибку?

Photo1

#include <stdio.h> 
#include <math.h> 

double cos(double x, double eps, double s=0,double n=0,double a=0) { 
    if (abs(n)<1){ 
    cos=cos(x, eps,1,1,1); 
} 
else { 
    a = -a*x*x/((2*n-1) * (2*n)); 
    if (abs(a)<=eps) { 
     cos=s; 
    } 
    else{ 
     cos=cos(x, eps, s+a, a,n+1); 
    } 
    } 
} 
int main() { 
    double x; 
    scanf("%f", &x); 
    cos(x, 0.000000000000001); 
} 
+2

Функция 'cos' объявляется как возвращающая двойное значение. Однако я не вижу никаких утверждений 'return' в этой функции. – abelenky

+2

Также C не поддерживает аргументы по умолчанию – Kevin

+2

Meh, C не является паскалем! Используйте 'return s;' вместо 'cos = s;' и так далее. – HolyBlackCat

ответ

3

Вы включены math.h, который имеет функцию с именем cos, которая работает немного по-другому.

Вы перегрузили это имя (например, еще одну функцию также с именем cos), но не предоставили компилятору какие-либо средства для вывода какой версии cos вы хотите позвонить.

Исправить это, назвав вашу функцию чем-то другим и уникальным.


Вот моя попытка исправить:

double TaylorCOS(double x, double eps, double s=0,double n=0,double a=0) 
{ 
    if (abs(n)<1) 
    { 
     return TaylorCOS(x, eps,1,1,1); 
    } 

    a = -a*x*x/((2*n-1) * (2*n)); 
    if (abs(a)<=eps) 
    { 
     return s; 
    } 

    return TaylorCOS(x, eps, s+a, a,n+1); 
} 
+1

Кроме того, OP должен исправить операторы 'return'. Теперь он пытается использовать синтаксис pascal 'FunctionName = value;' вместо 'return value;'. – HolyBlackCat

+0

Спасибо, abelenky – Dom

0

Вы не можете присвоить идентификатор функции, как вы делаете в

cos=s; 
cos=cos(x, eps, s+a, a,n+1); 

Ни в C, ни в C++. Эта программа прервана без ремонта.

Смежные вопросы