MATHEMATISCHES INSTITUT DER UNIVERSITÄT MÜNCHEN Dr. W. Spann, G. Kleen WS 2022/2023

Programmieren II für Studierende der Mathematik

Aufgabe 2

Erstellen Sie eine Klasse Polynom, die zur Speicherung der Koeffizienten des Polynoms p =

∑_{k=0}^{n} a_{k}x^{k} mit ganzzahligen Koeffizienten eine private Datenkomponente a vom Typ vector<int>

benutzt. In dieser sollen nur die Koeffizienten bis einschließlich des Höchstkoeffizienten (der per Definition ungleich 0 ist), abgespeichert werden. Das Nullpolynom wird durch einen Vektor der Länge 0 dargestellt und durch einen Konstruktor mit leerer Argumentliste erzeugt. Erstellen Sie Komponentenfunktionen mit folgenden Eigenschaften:

p.grad() Liefert Polynomgrad von p [-1 für Nullpolynom]
p.deriv() Liefert abgeleitetes Polynom p′

In der Klasse Polynom soll die Addition, Subtraktion und Multiplikation von Polynomen möglich sein. Überladen Sie die entsprechenden Operatoren geeignet. Zur Implementierung der Multiplikation können Sie die folgende Beziehung verwenden:

(∑_{i=0}^{m} a_{i}x^{i}) (∑_{j=0}^{n} b_{j}x^{j}) = ∑_{k=0}^{m+n} c_{k}x^{k} mit c_{k} = ∑_{i=max(0,k−n)}^{min(k,m)} a_{i}b_{k−i}

Die Polynomkoeffizienten sollen durch Eingabe von n, a_{0}, a_{1},…,a_{n} eingelesen werden. Die Polynomausgabe soll in der Form a_{0} + a_{1}x + … + a_{n}x^{n} (in einer geeigneten Ersatzdarstellung) erfolgen. Überladen Sie die Shift-Operatoren dementsprechend.

Lesen Sie im Hauptprogramm zwei Polynome p und q ein, berechnen Sie (pq)′, zum Vergleich p′q + pq′, und geben Sie alle diese Größen aus. Außerdem soll der Grad der Polynome p, q, (pq)′, und (pq)′ − p′q − pq′ ausgegeben werden.

Hinweise:

1. Die Länge des Koeffizientenvektors lässt sich mit der Komponentenfunktion resize ändern.

2. Zur Berechnung von min und max können Sie die gleichnamigen Funktionen aus der STL (#include <algorithm>) verwenden. Die eingesetzten Argumente müssen den gleichen Datentyp haben.

Rechnen Sie folgendes Beispiel: p = 1 − 2x + x^{2}, q = x + 2x^{2} + 3x^{3} + 4x^{4} + 5x^{5}

Bearbeitungszeitraum: bis Donnerstag, 17.11.2022, 16^{00}