#include #include #include "simplearray.cc" template class Polynomial: public SimpleArray { public: // konstruiere Polynom vom Grad n Polynomial (int n); // Default-Destruktor ist ok // Default-Copy-Konstruktor ist ok // Default-Zuweisung ist ok // Grad des Polynoms int degree(); // Auswertung T eval (T x); // Addition von Polynomen Polynomial operator+ (Polynomial q); // Multiplikation von Polynomen Polynomial operator* (Polynomial q); // Gleichheit bool operator== (Polynomial q); // drucke Polynom void print (); }; // Constructor template Polynomial::Polynomial(int n) : SimpleArray::SimpleArray(n+1,0.0) {} // Grad auswerten template int Polynomial::degree () { return SimpleArray::maxIndex(); } // Addition von Polynomen template Polynomial Polynomial::operator+ (Polynomial q) { int nr=degree(); // mein grad if (q.degree()>nr) nr=q.degree(); Polynomial r(nr); // Ergebnispolynom for (int i=0; i<=nr; i=i+1) { if (i<=degree()) r[i] = r[i]+(*this)[i]; // add me to r if (i<=q.degree()) r[i] = r[i]+q[i]; // add q to r } return r; } // Multiplikation von Polynomen template Polynomial Polynomial::operator* (Polynomial q) { Polynomial r(degree()+q.degree()); // Ergebnispolynom for (int i=0; i<=degree(); i=i+1) for (int j=0; j<=q.degree(); j=j+1) r[i+j] = r[i+j] + (*this)[i]*q[j]; return r; } // Drucken template void Polynomial::print () { if (degree()<0) std::cout << 0; else std::cout << (*this)[0]; for (int i=1; i<=SimpleArray::maxIndex(); i=i+1) std::cout << " + " << (*this)[i] << "*x^" << i; std::cout << std::endl; } int main() { Polynomial p(2); p[0] = 1.0; p[1] = 1.0; p.print(); p = p*p; p.print(); Polynomial q(3); q[0] = 2.0; q[1] = -1.0; q[3] = 4.0; q.print(); }