Vorsemesterkurs Informatik Übungsaufgaben Tag 6b: Objekte und C++ Aufgabe 1: Polynome als Objekte Ein Polynom in x ist ein Ausdruck der Form An (x) = a0 + a1 x + . . . an xn , wobei man die Zahl n als Grad des Polynoms bezeichnet. Die Zahlen ai , i = 0, . . . , n heißen Koeffizienten. Wie das Beispiel (a0 + a1 x) + b0 + b1 x + b2 x2 = (a0 + b0 ) + (a1 + b1 )x + b2 x2 (a0 + a1 x) · b0 + b1 x + b2 x2 = (a0 b0 ) + (a0 b1 + a1 b0 )x + (a0 b2 + a1 b1 )x2 + (a1 b2 )x3 verdeutlicht, kann man Polynome addieren und multiplizieren und erhält dann wieder ein Polynom mit neuen Koeffzienten. (a) Wir wollen Polynome nun als Objekte behandeln. Dazu sei uns die folgende Header-Datei Polynom.h vorgegeben: 1 2 #ifndef POLYNOM_H_ #define POLYNOM_H_ 3 4 5 6 7 class Polynom { private: unsigned int N; double *coeff; // Grad des Polynoms // Koeffizienten 8 9 10 11 12 13 14 15 16 public: // Erzeugt das Nullpolynom vom Grad n Polynom(unsigned int n) : N(n), coeff(new double[n+1]) { for (unsigned int i=0; i<=N; ++i) (*this)[i] = 0.0; }; 17 18 19 // TODO: Kopierkonstruktor Polynom(const Polynom &p); 20 21 22 23 // Destruktor ~Polynom() { delete[] coeff;} 24 25 26 27 // Liefert Referenz auf n-ten Koeffizienten (veraenderbar) double& operator[](unsigned int n) { return coeff[n]; } 28 29 30 31 // Liefert n-ten Koeffizienten (konstant) double operator[](unsigned int n) const { return coeff[n]; } 32 Seite 1 // Liefert Grad des Polynoms unsigned int grad() const { return N; } 33 34 35 36 // TODO: Werte ’this’ an Stelle x aus double auswertung(double x) const; 37 38 39 // TODO: Liefert r := ’this’ + q zurueck Polynom addiere(const Polynom &q) const; 40 41 42 // TODO: Liefert r := ’this’ * q zurueck Polynom multipliziere(const Polynom &q) const; 43 44 45 // TODO: Ausgabe (nach cout): p_0 + p_1*X + ... p_N*X^N void ausgabe() const; 46 47 48 // TODO: Prueft, ob Polynome gleich sind bool ist_gleich(const Polynom &q) const; 49 50 51 }; 52 53 #endif /* POLYNOM_H_ */ In der obigen Datei fehlen sechs Methoden. Diese sind mit TODO gekennzeichnet, außerdem fehlt die Funktionsdefinition {...}. Implementiere diese in einer Datei Polynom.cpp. (b) Teste die Methoden selbstgewählten Beispielen. Hilfestellung: Für zwei allgemeine Polynome An (x) = a0 + a1 x + . . . an xn , Bm (x) = b0 + b1 x + . . . bm xm lassen sich die Summe Cp = An + Bm bzw. das Produkt Dp = An · Bm wie folgt berechnen: Cp (x) := (An + Bm )(x) Dp (x) := (An · Bm )(x) = = p X ck x k , mit p := max (m,n), dk xk , mit p := m + n, k=0 p X k=0 ck = (ak + bk ) dk = X ai bj i+j=k (2) (Nicht vorhandene Koeffizienten werden dabei durch 0 ersetzt.) Aufgabe 2: Weitere Aufgaben Bearbeite eine beliebige Aufgabe von einem der vorherigen Aufgebenblätter! Viel Erfolg! Seite 2