Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

109 lines
2.2KB

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include "simplearray.cc"
  4. template <class T>
  5. class Polynomial: public SimpleArray<T> {
  6. public:
  7. // konstruiere Polynom vom Grad n
  8. Polynomial<T> (int n);
  9. // Default-Destruktor ist ok
  10. // Default-Copy-Konstruktor ist ok
  11. // Default-Zuweisung ist ok
  12. // Grad des Polynoms
  13. int degree();
  14. // Auswertung
  15. T eval (T x);
  16. // Addition von Polynomen
  17. Polynomial<T> operator+ (Polynomial<T> q);
  18. // Multiplikation von Polynomen
  19. Polynomial<T> operator* (Polynomial<T> q);
  20. // Gleichheit
  21. bool operator== (Polynomial q);
  22. // drucke Polynom
  23. void print ();
  24. };
  25. // Constructor
  26. template <class T>
  27. Polynomial<T>::Polynomial(int n)
  28. : SimpleArray<T>::SimpleArray(n+1,0.0) {}
  29. // Grad auswerten
  30. template <class T>
  31. int Polynomial<T>::degree ()
  32. {
  33. return SimpleArray<T>::maxIndex();
  34. }
  35. // Addition von Polynomen
  36. template <class T>
  37. Polynomial<T> Polynomial<T>::operator+ (Polynomial<T> q) {
  38. int nr=degree(); // mein grad
  39. if (q.degree()>nr) nr=q.degree();
  40. Polynomial r(nr); // Ergebnispolynom
  41. for (int i=0; i<=nr; i=i+1)
  42. {
  43. if (i<=degree())
  44. r[i] = r[i]+(*this)[i]; // add me to r
  45. if (i<=q.degree())
  46. r[i] = r[i]+q[i]; // add q to r
  47. }
  48. return r;
  49. }
  50. // Multiplikation von Polynomen
  51. template <class T>
  52. Polynomial<T> Polynomial<T>::operator* (Polynomial<T> q)
  53. {
  54. Polynomial r(degree()+q.degree()); // Ergebnispolynom
  55. for (int i=0; i<=degree(); i=i+1)
  56. for (int j=0; j<=q.degree(); j=j+1)
  57. r[i+j] = r[i+j] + (*this)[i]*q[j];
  58. return r;
  59. }
  60. // Drucken
  61. template <class T>
  62. void Polynomial<T>::print ()
  63. {
  64. if (degree()<0)
  65. std::cout << 0;
  66. else
  67. std::cout << (*this)[0];
  68. for (int i=1; i<=SimpleArray<T>::maxIndex(); i=i+1)
  69. std::cout << " + " << (*this)[i] << "*x^" << i;
  70. std::cout << std::endl;
  71. }
  72. int main() {
  73. Polynomial<float> p(2);
  74. p[0] = 1.0;
  75. p[1] = 1.0;
  76. p.print();
  77. p = p*p;
  78. p.print();
  79. Polynomial<double> q(3);
  80. q[0] = 2.0;
  81. q[1] = -1.0;
  82. q[3] = 4.0;
  83. q.print();
  84. }