fork download
  1. #include <iostream>
  2. #include <complex>
  3. #include <map>
  4.  
  5. struct Level
  6. {
  7. long double coefficient;
  8. size_t exponent;
  9.  
  10. Level(long double ld = 0, size_t s = 0): //default: Summe, 0
  11. coefficient(ld), exponent(s) {}
  12.  
  13. long double operator()(long double x)
  14. {
  15. return coefficient * std::pow(x, exponent);
  16. }
  17. };
  18.  
  19. bool operator<(Level const& a, Level const& b)
  20. {
  21. return a.exponent < b.exponent;
  22. }
  23. bool operator==(Level const& a, Level const& b)
  24. {
  25. return a.exponent == b.exponent;
  26. }
  27.  
  28. //Template-Meta Version?
  29. class Polynom
  30. {
  31. std::map<size_t, Level> mLevels;//Redundanz-Pegel: 4/10 :D
  32. size_t const mNLevel;
  33.  
  34. public:
  35.  
  36. template<typename it_t>
  37. Polynom(it_t a, it_t b):
  38. mLevels(a, b),
  39. mNLevel(mLevels.size()) {}
  40.  
  41. long double operator()(long double X)
  42. {
  43. long double sum(0);
  44. for(size_t a(0) ; a < mLevels.size(); ++a) //Range-Based for in C++11 - bin zu faul zum iterieren :p
  45. sum += mLevels[a](X);
  46.  
  47. return sum;
  48. }
  49. };
  50.  
  51. int main()
  52. {
  53. std::map<size_t, Level> v;
  54. v[2] = 3;
  55. v[1] = 9;
  56. v[0] = 3.41;
  57. //Die Funktion lautet: 3x zum Quadrat + 2x + 3.41
  58.  
  59. Polynom p(v.begin(), v.end());
  60.  
  61. std::cout << p(1) << '\n';
  62. }
Success #stdin #stdout 0.01s 2816KB
stdin
Standard input is empty
stdout
15.41