#include <iostream>
#include <complex>
#include <map>
struct Level
{
long double coefficient;
size_t exponent;
Level(long double ld = 0, size_t s = 0): //default: Summe, 0
coefficient(ld), exponent(s) {}
long double operator()(long double x)
{
return coefficient * std::pow(x, exponent);
}
};
bool operator<(Level const& a, Level const& b)
{
return a.exponent < b.exponent;
}
bool operator==(Level const& a, Level const& b)
{
return a.exponent == b.exponent;
}
//Template-Meta Version?
class Polynom
{
std::map<size_t, Level> mLevels;//Redundanz-Pegel: 4/10 :D
size_t const mNLevel;
public:
template<typename it_t>
Polynom(it_t a, it_t b):
mLevels(a, b),
mNLevel(mLevels.size()) {}
long double operator()(long double X)
{
long double sum(0);
for(size_t a(0) ; a < mLevels.size(); ++a) //Range-Based for in C++11 - bin zu faul zum iterieren :p
sum += mLevels[a](X);
return sum;
}
};
int main()
{
std::map<size_t, Level> v;
v[2] = 3;
v[1] = 9;
v[0] = 3.41;
//Die Funktion lautet: 3x zum Quadrat + 2x + 3.41
Polynom p(v.begin(), v.end());
std::cout << p(1) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y29tcGxleD4KI2luY2x1ZGUgPG1hcD4KCnN0cnVjdCBMZXZlbAp7CiAgICBsb25nIGRvdWJsZSBjb2VmZmljaWVudDsKICAgIHNpemVfdCBleHBvbmVudDsKCiAgICBMZXZlbChsb25nIGRvdWJsZSBsZCA9IDAsIHNpemVfdCBzID0gMCk6IC8vZGVmYXVsdDogU3VtbWUsIDAKICAgIGNvZWZmaWNpZW50KGxkKSwgZXhwb25lbnQocykge30KCiAgICBsb25nIGRvdWJsZSBvcGVyYXRvcigpKGxvbmcgZG91YmxlIHgpCiAgICB7CiAgICAgICAgICAgIHJldHVybiBjb2VmZmljaWVudCAqIHN0ZDo6cG93KHgsIGV4cG9uZW50KTsKICAgIH0KfTsKCmJvb2wgb3BlcmF0b3I8KExldmVsIGNvbnN0JiBhLCBMZXZlbCBjb25zdCYgYikKewogICAgICAgIHJldHVybiBhLmV4cG9uZW50IDwgYi5leHBvbmVudDsKfQpib29sIG9wZXJhdG9yPT0oTGV2ZWwgY29uc3QmIGEsIExldmVsIGNvbnN0JiBiKQp7CiAgICAgICAgcmV0dXJuIGEuZXhwb25lbnQgPT0gYi5leHBvbmVudDsKfQoKLy9UZW1wbGF0ZS1NZXRhIFZlcnNpb24/CmNsYXNzIFBvbHlub20KewogICAgc3RkOjptYXA8c2l6ZV90LCBMZXZlbD4gbUxldmVsczsvL1JlZHVuZGFuei1QZWdlbDogNC8xMCA6RAogICAgc2l6ZV90IGNvbnN0IG1OTGV2ZWw7CgpwdWJsaWM6CgogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIGl0X3Q+CiAgICAgICAgUG9seW5vbShpdF90IGEsIGl0X3QgYik6CiAgICAgICAgbUxldmVscyhhLCBiKSwKICAgICAgICBtTkxldmVsKG1MZXZlbHMuc2l6ZSgpKSB7fQoKICAgICAgICBsb25nIGRvdWJsZSBvcGVyYXRvcigpKGxvbmcgZG91YmxlIFgpCiAgICAgICAgewogICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgc3VtKDApOwogICAgICAgICAgICAgICAgZm9yKHNpemVfdCBhKDApIDsgYSA8IG1MZXZlbHMuc2l6ZSgpOyArK2EpIC8vUmFuZ2UtQmFzZWQgZm9yIGluIEMrKzExIC0gYmluIHp1IGZhdWwgenVtIGl0ZXJpZXJlbiA6cAogICAgICAgICAgICAgICAgICAgICAgICBzdW0gKz0gbUxldmVsc1thXShYKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gc3VtOwogICAgICAgIH0KfTsKCmludCBtYWluKCkKewogICAgICAgIHN0ZDo6bWFwPHNpemVfdCwgTGV2ZWw+IHY7CiAgICAgICAgdlsyXSA9IDM7CiAgICAgICAgdlsxXSA9IDk7CiAgICAgICAgdlswXSA9IDMuNDE7CgkvL0RpZSBGdW5rdGlvbiBsYXV0ZXQ6IDN4IHp1bSBRdWFkcmF0ICsgMnggKyAzLjQxCgogICAgICAgIFBvbHlub20gcCh2LmJlZ2luKCksIHYuZW5kKCkpOwoKICAgICAgICBzdGQ6OmNvdXQgPDwgcCgxKSA8PCAnXG4nOwp9