سلام.
برنامه ای که نوشتم به این صورت هست:
کد:
#include "stdio.h"
#include "Math.h"
#define M_PI 3.141592653
float Afunction(float n , float x);
double Bfunction(int n );
int main()
{
int n = 10;
float x = 45; //----> Angle
float Result = 0;
x *= M_PI / 180; //----> convert to Rad
for(int i = 0; i <= n; i++)
Result += Afunction(i,x) / Bfunction(i);
printf("%3.4f\n",Result);
return 0;
}
double Bfunction(int n)
{
n = 2*n + 1;
double Result = 1;
for( int i = 1; i <= n; i++)
Result *= i;
return Result;
}
float Afunction(float n,float x)
{
float A = pow(-1,n);
float B = pow ( x,((2*n)+1) );
return A * B ;
}
نکته مهم دقت محاسبه ی مقدار sinX هست که با توجه به مقدار n تعیین میشه.
سعی کنید مقدار n رو از 10 بزرگتر نگیرید. چون نتیجه از تابع Bfuncton که فاکتوریل رو حساب میکنه
ممکنه سرریز (overflow) بشه. اگه دقت براتون خیلی مهم هست(که فکر نمیکنم لازه باشه) باید از رشته ها استفاده کنید. نکته بعدی اینکه مقدار x باید به رادیان باشه که میشه با ضربش در p/180 اون رو محاسبه کرد.
اگه جايي نياز به توضيح داشت اطلاع بديد.