#include <iostream>
#include <math.h>

using namespace std;

float triangle(int k_max, float omega, float x)
{
    float wynik=0;
    for(int i=0; i<=k_max; i++)
    {
        wynik+=8*pow(-1, i)*(sin((2*i+1)*omega*x)/pow(2*i+1, 2))/pow(M_PI, 2);
    }
    return wynik;
}

//typedef float( * wskaznikT )(int, float, float);
//wskaznikT wskaznik= triangle;

float derForw(float (*w) (int kmax, float omega, float x), float arg, float stala)
{
	float wynik= (w(10, 3.14, arg+stala)-w(10, 3.14, arg))/stala;
	return wynik;
}

float derCentr(float (*w) (int kmax, float omega, float x), float arg, float stala)
{
	float wynik= (w(10, 3.14, arg+stala)-w(10, 3.14, arg-stala))/2*stala;
	return wynik;
}

float derBack(float (*w) (int kmax, float omega, float x), float arg, float stala)
{
	float wynik= (w(10, 3.14, arg)-w(10, 3.14, arg-stala))/stala;
	return wynik;
}

int main() {
	int kmax=3;
	float omega=4;
	float x=2;
	float stala=0.1;
	//float (*p)(int kmax, float omega, float x);
	//p = triangle;
	for(float i=x;i<2.5;i+=0.01)
	cout << triangle(10, 3.14, i) << " ";
	cout << endl;
	for(float i=x;i<2.5;i+=0.01)
	cout << derForw(&triangle, i, stala) << " ";
	
	
}