Cześć,
Mam zadanie o następującej treści:

Policz wartości funkcji y=f(x) we wszystkich punktach podziału na n części przedziału [a,b]. Funkcja f dana jest w postaci rozwinięcia w szereg potęgowy i w postaci wzoru analitycznego. Obliczanie sumy szeregu wykonaj z dokładnością epsilon. Algorytm obliczania sumy szeregu zapisz w oddzielnej funkcji.

Uzupełnij funkcję obliczającą sumę szeregu tak, by sumowanych było co najwyżej M wyrazów szeregu. Oznacza to, że przerwanie sumowania może nastąpić również wtedy, gdy nie została osiągnięta żądana dokładność. Informacja o tym, czy została osiągnięta dokładność czy też nie winna być znana w funkcji main().

Uzupełnij funkcję obliczającą sumę szeregu tak, by w funkcji main() znana była dodatkowo liczba sumowanych wyrazów szeregu.

Screen mojego szeregu znajdzie się w załączniku

Co do zadania wykonałem chyba wszystko oprócz tego obliczania sumy szeregu. Przyznam się że nie wiedziałem z czego skorzystać i obecne rozwiazanie jest conajmniej błędne, obliczałem to trochę metodą dedukcji, a chciałbym to ładnie zewrzeć w kodzie funkcji, czy mogę prosić o pomoc?

Oto co mi się udało zebrać do tej pory:


//Projekt numer jeden
#pragma warning (disable: 4996) 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double szereg(double x, double eps, int *m);
int main()
{

	double wz1 = 0.0;
	double wz2 = 0.0;
	double eps = 0.0;	//dokladnosc szeregu 
	double a = 0.0, b = 0.0;		//przedzial mieszczacy sie w dziedzinie |x|<=1.
	int n = 0.0;				//okresla na ile czesci podzielony jest przedzial
	int m = 0.0;				//okresla ile wyrazow ma zostac zsumowane
	printf("Dziedzina funkcji jest przedzial <-1,1>\n");
	printf("Podaj poczatek i koniec przedzialu:\n");
	scanf("%lf%lf", &a, &b);
	if ((fabs(a) <= 1.0) && (fabs(b) <= 1.0) && (a < b)) {
		printf("Podaj na ile czesci chcesz podzielic swoj przedzial (liczba N+): ");
		scanf("%i", &n);
			if (n < 1) {
				printf("Niepoprawne dane (n<1), sprobuj jeszcze raz\n");
			}
			else {
				double krok = (fabs(b) + fabs(a)) / (double)n;
				printf("Podaj dokladnosc: ");
				scanf("%lf", &eps);
				printf("Podaj ile wyrazow chcesz zsumowac: ");
				scanf("%i", &m);
				int l_wyr = m;
				if (m <= 0) {
					printf("Niepoprawne dane (m<=0), sprobuj jeszcze raz\n");
				}
				else {
					double x = a;
					int ile = 0;
					int liczba_wyrazow = m;
					for (x; x <= b; x = x + krok) {
						wz1 = pow(1.0 + x, 1.0 / 3.0);
						wz2 = szereg(x, eps, &m);
						ile = l_wyr - m;
						if (m <= 0) {
							printf("%.7lf\tszereg:%lf\t\tfunkcja:%lf\twyrazow:%i\tosiagnieto m wyrazow\n", x, wz2, wz1, ile);
						}
						else {
							printf("%.7lf\tszereg:%lf\t\tfunkcja:%lf\twyrazow:%i\tosiagnieto dokladnosc\n", x, wz2, wz1, ile);
						}
						m = l_wyr;
					}
					printf("---------------------");
					printf("\nKONIEC PROGRAMU\n");
					printf("---------------------");
				}
			}
	}
	else {
		printf("Niepoprawne dane (a,b<1=0), sprobuj jeszcze raz\n");
	}
}

double szereg(double x, double eps, int *m) {
	double s = 1.0;  //suma
	double w = 1.0; //n-ty wyraz
	double mian = -3.0; //mianownik
	double licz = 1.0; //licznik
	do {
		w = w * licz / mian;
		s = s + w;
		mian = mian - 3.0;
		licz = mian + 4.0;
		*m = *m - 1;
	} while (fabs(w) >= eps * fabs(s) && *m > 0);
	return s;
}