Witam. Mam problem z pewnym programem w C, który potrzebuję napisać na zaliczenie. Otóż, program ma za zadanie obliczyć rozwinięcie funkcji cos x w dany szereg. Sporą część kodu już napisałem, lecz ciągle borykam się z problemami, z których największym jest samo zakodowanie szeregu. Będę wdzięczny za rady i wskazówki.
Wzór szeregu znajduje się pod tym adresem: https://www.dropbox.com/s/wvqis2r29idjkts/szereg.jpg
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, x, y, eps, n, dx, fun() ;
unsigned long silnia(int) ;
FILE *plik;
do
{
printf ("Program oblicza rozwiniecie wzoru cos x\nPodaj poczatek przedzialu: ");
scanf ("%lf", &a); //wprowadzamy poczatek przedzialu
if (a < 0)
{
printf ("Wartosc spoza dziedziny\n Podaj inna wartosc: ");
}
printf ("Podaj koniec przedzialu: "); //wprowadzamy koniec przedzialu
scanf ("%lf", &b);
if (b < 0)
{
printf ("Wartosc spoza dziedziny\n Podaj inna wartosc: ");
scanf ("%lf", &b);
}
if (a == b)
{
printf ("Poczatek przedzialu nie moze byc taki sam jak jego koniec\n");
}
if (a > b)
{
printf ("Poczatek przedzialu nie moze byc wiekszy od jego konca\n");
}
}while (a >= b);
printf ("Podaj ilosc podzialow: "); //podajemy ilosc podzialow
scanf ("%lf", &n);
while (n <= 0)
{
printf ("Ilosc podzialow musi byc wieksza od zera\nPodaj nowa ilosc podzialow: ");
scanf ("%lf", &n);
}
printf ("Podaj dokladnosc: ");
scanf ("%lf", &eps);
dx = (b-a)/n;
plik = fopen ("wynik", "w"); //otwarcie pliku
for (x=a; x<=b; x=x+dx)
{
y = fun(x, eps); //wywolanie funkcji
printf ("x=%.3lf f(x)=cosx szereg: f(x)=%lf funkcja: %lf\n", x, y, cos(x));
fprintf (plik, "x=%.3lf f(x)=cosx szereg: f(x)=%lf funkcja: %lf\n", x, y, cos(x));
}
fclose (plik); //zamkniecie pliku
return 0 ;
}
/****************FUNKCJA***************/
unsigned long silnia (int k)//definicja funkcji silnia
{
if(k<=1) return(1);
else return(k*silnia(k-1));
}
double fun(double x, double eps)
{
double s, a;
long n, licznik;
a = 1;
s = 1;
n = 2;
licznik = 1 ;
do
{
a = (pow(x, n))/(silnia(n));
if (licznik % 2 == 0)
s = s + a ;
else s = s - a ;
n = n + 2;
}while (fabs(a) > fabs(s)*eps);
return s;
}