#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) << " ";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmZsb2F0IHRyaWFuZ2xlKGludCBrX21heCwgZmxvYXQgb21lZ2EsIGZsb2F0IHgpCnsKICAgIGZsb2F0IHd5bmlrPTA7CiAgICBmb3IoaW50IGk9MDsgaTw9a19tYXg7IGkrKykKICAgIHsKICAgICAgICB3eW5pays9OCpwb3coLTEsIGkpKihzaW4oKDIqaSsxKSpvbWVnYSp4KS9wb3coMippKzEsIDIpKS9wb3coTV9QSSwgMik7CiAgICB9CiAgICByZXR1cm4gd3luaWs7Cn0KCi8vdHlwZWRlZiBmbG9hdCggKiB3c2them5pa1QgKShpbnQsIGZsb2F0LCBmbG9hdCk7Ci8vd3NrYXpuaWtUIHdza2F6bmlrPSB0cmlhbmdsZTsKCmZsb2F0IGRlckZvcncoZmxvYXQgKCp3KSAoaW50IGttYXgsIGZsb2F0IG9tZWdhLCBmbG9hdCB4KSwgZmxvYXQgYXJnLCBmbG9hdCBzdGFsYSkKewoJZmxvYXQgd3luaWs9ICh3KDEwLCAzLjE0LCBhcmcrc3RhbGEpLXcoMTAsIDMuMTQsIGFyZykpL3N0YWxhOwoJcmV0dXJuIHd5bmlrOwp9CgpmbG9hdCBkZXJDZW50cihmbG9hdCAoKncpIChpbnQga21heCwgZmxvYXQgb21lZ2EsIGZsb2F0IHgpLCBmbG9hdCBhcmcsIGZsb2F0IHN0YWxhKQp7CglmbG9hdCB3eW5paz0gKHcoMTAsIDMuMTQsIGFyZytzdGFsYSktdygxMCwgMy4xNCwgYXJnLXN0YWxhKSkvMipzdGFsYTsKCXJldHVybiB3eW5pazsKfQoKZmxvYXQgZGVyQmFjayhmbG9hdCAoKncpIChpbnQga21heCwgZmxvYXQgb21lZ2EsIGZsb2F0IHgpLCBmbG9hdCBhcmcsIGZsb2F0IHN0YWxhKQp7CglmbG9hdCB3eW5paz0gKHcoMTAsIDMuMTQsIGFyZyktdygxMCwgMy4xNCwgYXJnLXN0YWxhKSkvc3RhbGE7CglyZXR1cm4gd3luaWs7Cn0KCmludCBtYWluKCkgewoJaW50IGttYXg9MzsKCWZsb2F0IG9tZWdhPTQ7CglmbG9hdCB4PTI7CglmbG9hdCBzdGFsYT0wLjE7CgkvL2Zsb2F0ICgqcCkoaW50IGttYXgsIGZsb2F0IG9tZWdhLCBmbG9hdCB4KTsKCS8vcCA9IHRyaWFuZ2xlOwoJZm9yKGZsb2F0IGk9eDtpPDIuNTtpKz0wLjAxKQoJY291dCA8PCB0cmlhbmdsZSgxMCwgMy4xNCwgaSkgPDwgIiAiOwoJY291dCA8PCBlbmRsOwoJZm9yKGZsb2F0IGk9eDtpPDIuNTtpKz0wLjAxKQoJY291dCA8PCBkZXJGb3J3KCZ0cmlhbmdsZSwgaSwgc3RhbGEpIDw8ICIgIjsKCQoJCn0=