• Keine Ergebnisse gefunden

U¨BUNG12.1 DIESTANDARDTEMPLATE LIBRARY (STL) Die C++ Standard Library, die in der Regel mit dem Akronym ihrer Vorg¨angerin STL bezeichnet wird, stellt Container und Algorithmen zur Verf ¨ugung

N/A
N/A
Protected

Academic year: 2021

Aktie "U¨BUNG12.1 DIESTANDARDTEMPLATE LIBRARY (STL) Die C++ Standard Library, die in der Regel mit dem Akronym ihrer Vorg¨angerin STL bezeichnet wird, stellt Container und Algorithmen zur Verf ¨ugung"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungen Einf ¨uhrung in die Praktische Informatik, Wintersemester 2014/15¨ Aufgabenblatt 12 Prof. Dr. P. Bastian, O. Klein, A. Ngo, D. Kempf Abgabetermin 22. Januar 2015 IWR, Universit¨at Heidelberg

Anmerkung:Hinweise zur Klausur wurden in den letzten Tagen per Mail an Sie verschickt.

Lesen Sie sich diese durch und wenden Sie sich bei Problemen an info14@conan.iwr.uni- heidelberg.de.

BUNG12.1 DIESTANDARDTEMPLATE LIBRARY (STL)

Die C++ Standard Library, die in der Regel mit dem Akronym ihrer Vorg¨angerin STL bezeichnet wird, stellt Container und Algorithmen zur Verf ¨ugung. Fast jedes gr ¨oßere Programm profitiert von der Verwendung der STL. Nicht nur erspart man sich auf diese Weise viel Programmieraufwand, weil die abstrakten Datentypen nicht selbst implementiert werden m ¨ussen, man reduziert auch die Wahrscheinlichkeit, subtile Bugs zu produzieren.

Schreiben Sie eine Vektorklasse, die einenstd::vector zur Verwaltung der Eintr¨age verwendet.

Ubergeben Sie den Typ der Elemente und die L¨ange des Vektors als Templateparameter. Die Klasse¨ soll Methoden bereit stellen, die folgende Operationen erlauben:

• Addition zweier Vektoren

• Multiplikation mit einem Skalar

• Skalarprodukt

• Anwendung einer beliebigen Funktion (als Funktor) auf die Eintr¨age

• Berechnung von Maximum, Minimum und Mittelwert

Das genaue Interface ist Ihnen ¨uberlassen. ¨Ubergeben Sie den Methoden ihre Argumente templa- tisiert, z.B. muss der Skalar bei der Skalarmultiplikation nicht den Typ der Vektoreintr¨age haben.

Schreiben Sie ein Programm, das Ihre Klasse testet. Benutzen Sie jeweils in mindestens einer Metho- de

• den Elementzugriff ¨uber operator[], durch den sich der std::vector wie ein C-Array verwenden l¨asst

• den Zugriff ¨uber die Containeriteratoren, der auch mit anderen Containern (z.B.std::list) funktioniert

• die vordefinierten STL-Algorithmen, die ebenfalls mit anderen Containern funktionieren Die in der STL definierten Container und die Komplexit¨at ihrer Methoden k ¨onnen Sie z.B. unter http://www.cplusplus.com/reference/stl/finden, w¨ahrend die Algorithmen unterhttp:

//www.cplusplus.com/reference/algorithm/stehen.

10 Punkte

BUNG12.2 FUNKTOREN UND STATISCHERPOLYMORPHISMUS

Funktoren sind, wie in der Vorlesung bereits definiert, Klassen, derenoperator() ¨uberladen ist.

Sie verhalten sich damit effektiv, wie Funktionen, haben jedoch durch ihre privaten Mitglieder ein

“Ged¨achtnis”. Betrachten Sie das folgende Beispiel eines Funktors:

class Quadrat {

public:

double operator()(double x) {

return x*x;

}

(2)

};

int main() {

Quadrat f;

double y = f(3.0); / / an d i e s e r S t e l l e w i r d Quadrat : : o p e r a t o r ( ) ( 3 . 0 ) a u s g e w e r t e t ! }

In der numerischen Mathematik n¨ahert man Integrale mittels sogenannter Quadraturformeln.

Dabei wird das Integrationsintervall[a, b]inngleich große Intervalle unterteilt und die Funktion auf jedem dieser Intervalle durch ein Polynom angen¨ahert. F ¨urn→ ∞konvergiert dieser Wert gegen das Integral. Man erh¨alt ein N¨aherungsverfahren, indem manngerade so groß w¨ahlt, dass der Fehler im Integral klein genug wird. Verwendet man lineare Polynome ergibt sich die sogenannte “summierte Trapezregel” (dabei ist die Intervalll¨angeh= (b−a)/n):

In(f;a, b) = h

2 f(a) + 2

n−1

X

i=1

f(a+ih) +f(b)

!

a a+h

1/2 h [f(a) + f(a+h)]

a) Schreiben Sie eine Funktion trapezregel, welche obige Formel implementiert. Neben der An- zahl an Intervallen n und den Integrationsgrenzen a und b muss dieser Funktion auch die zu in- tegrierende Funktion ¨ubergeben werden. Da man die Funktiontrapezregelf ¨ur beliebige Funktio- nen verwenden will, muss man hierf ¨ur eine Technik des Polymorphismus verwenden. Im Falle des dynamischen Polymorphismus w ¨urde man eine abstrakte BasisklasseFunktioneinf ¨uhren und der Funktion trapezregel eine Referenz auf ein Objekt dieser Basisklasse ¨ubergeben. Wir wollen das Problem allerdings mittels statischem Polymorphismus l ¨osen. Dazu realisieren wir unsere Funkti- on als Funktor und ¨ubergeben diesen an die Funktion. Der exakte Typ des Funktors ist dabei ein Template-Parameter der Methodetrapezregel. Testen Sie Ihre Funktion mit einem Beispielfunktor.

[6 Punkte]

b)Nennen Sie Vor- und Nachteile der Verwendung von statischem Polymorphismus gegen ¨uber

dynamischem Polymorphismus. [4 Punkte]

10 Punkte

Referenzen

ÄHNLICHE DOKUMENTE

■ Sicht: Folge von Operationen, die unter einem Sichtnamen langfristig abgespeichert wird und unter diesem Namen wieder aufgerufen werden kann; ergibt eine Sichtrelation.. ■

exec sql declare AktBuch cursor for select ISBN, Titel, Verlagsname from Bücher. for update of

Bei Multiplikation und Division werden die Zahl- faktoren multipliziert / dividiert und die Variablen mithilfe der Potenzgesetze

Wie heißen die 4 Grundtypen der Zufallsexperimente und die dazugeh¨ origen Formeln1. n ist die Anzahl der vorhandenen Elemente k ist die Anzahl

Klausur (Probeklausur) Analysis I (240003) 1.. c) Die Behauptung ist im Allgemeinen nicht wahr.. b) Der Logarithmus ist eine auf (0, ∞) definierte Funktion.. Wir zeigen nun, dass

Da aber jede natürliche Zahl > 1 durch eine Primzahl (etwa der kleinste Teiler von n , der > 1 ist, vgl. Satz 4) teilbar sein muss, existiert noch eine weitere Primzahl,

Es werden allerdings nicht alle pythagoreischen Tripel generiert... Jedes pythagoreische Dreieck ist zwei

Die zu den Tripeln gehörenden Dreiecke nähern sich eben- falls einem rechtwinklig gleichschenkligen Dreieck an.. Die beiden Kathetenlängen un- terscheiden sich immer nur