Aufgaben

  1. Vektor-Klasse
    Entwerfen Sie ausgehend von den Beispielen die My3Vector Klasse. Zunächst können Sie alle Teile (Deklaration, Implementierung der Methoden und Aufruf in main() ) in ein gemeinsames source file packen. Führen Sie einige zusätzliche `sinnvolle' Methoden ein, z.B. Länge eines Vektors, Winkel zwischen zwei Vektoren, Skalarprodukt, Vektorprodukt.

    Lösungsbeispiel: Alles zusammen T3VectorAllInclusive.cpp (html, source),

  2. Vektor-Klasse aufteilen
    Folgen Sie jetzt der C++ Konvention das Programm in drei verschiedene Files zu trennen: die Deklaration der My3Vector-Klasse kommt in eine Header-Datei (z.B. My3Vector.h), die Implementierung der Methoden geht in ein extra source file (z.B. My3Vector.cpp) und schliesslich die main() Funktion zum Testen in z.B. T3Vector.cpp

    Lösungsbeispiel: Header My3Vector.h (html, source), Implementation My3Vector.cpp (html, source), Testprogramm T3Vector.cpp (html, source)
    Kompilieren: g++ -o T3Vector T3Vector.cpp My3Vector.cpp

  3. Operator–Overloading
    Implementieren Sie die Addition zweier Vektoren mit dem + Operator und die Multiplikation mit double


    
     int main()
     {
       double x = 3.;
       My3Vector a(1.,1.,0.);
       My3Vector b(-1.,1.,0.);
       My3Vector c = a + b;
       My3Vector d = a * x; // von rechts
       My3Vector e = x * a; // von links
     }  
    
    

    Lösungsbeispiel: Header myvec.h, Code myvec.cpp, Testprogramm tvec.cpp.

  4. Const correct Definiton der My3Vector Klasse
    Implementieren Sie sorgfältig die const Spezifikation für Argumente und Methoden in der My3Vector Klasse.

    Und zur Anschauung noch die ThreeVector Klasse aus der CLHEP Klassenbibliothek (Utility Classes for Particle Physics): Header ThreeVector.h, source code ThreeVector.cc, ThreeVector.icc

  5. Statistik
    Die Klasse StatCalc (html, source) implementiert einige grundlegende Statistikfunktionen, wie Mittelwert, Standardabweichung, ...
    Ein kurzes Testprogramm ist angehängt, das Zufallszahlen in ein StatCalc Objekt füllt und anschliesend die Statistik–größen ausgibt.

    (a) Probieren Sie das Programm aus und Erweitern dann die StatCalc Klasse um Methoden zur Berechnung und Ausgabe von Minimum und Maximum.
    (c) In semester.dat finden Sie die Semesterzahl bis zum Physikdiplom für zufällig ausgewählte Studenten. Die ersten 100 Einträge sind von Studenten der LMU, die restlichen 100 von Studenten der TUM. Lesen Sie die Daten ein und füllen LMU bzw TUM Zahlen jeweils in ein StatCalc Objekt. Sind die Mittelwerte im Rahmen der Schwankungen konsistent ?
    (d) Überlegen Sie wie man das Problem aus (c) (mehrere Statistiken parallel führen) in einer prozeduralen Sprache (Fortran, C) angehen könnte, d.h. ohne Klassen und Objekte, nur mit Arrays und Funktionen.

  6. String Klasse
    Die C++ string Klasse stellt eine Vielzahl nützlicher Methoden zur Textanalyse bzw. Modifikation zur Verfügung. In kant.txt finden Sie eine elektronische Fassung von Immanuel Kant's "Kritik der reinen Vernunft".

    (a) Wieviele Zeilen enthält der Text ?

    (b) Finden Sie die String Funktion die Gross-Buchstaben in Klein-Buchstaben umwandelt und transformieren sie damit den ganzen Text.

    (c) Wie oft kommt das Wort Vernunft in dem Text vor ?

    Hinweis: Mit getline( istream in, string s ) kann man eine ganze Zeile in einen String einlesen. Rückgabewert kann für File-Ende Test genommen werden (liefert 0).


  7. MyRes Klasse
    Studieren Sie das Beispiel, was machen copy-constructor, = operator und destructor. Versuchen Sie nachzuvollziehen bei welchen Aktionen sie jeweils gerufen werden.

  8. Vererbung
    Leiten Sie die Lorentz-Vektor Klasse (Vierer-Vektor \ensuremath{ = \; (E, p_x, p_y, p_z) = (E, \vec{p}\,)} ) von der Dreier-Vektor Klasse ab.
    Lorentz-Vektoren sollten als zusätzliche Methoden die Masse berechnen können:

    $\displaystyle M = \sqrt{E^2 - \vec{p}^2}$

    sowie die invariante Masse zweier Lorentzvektoren:

    $\displaystyle M_{inv} = \sqrt{(E_1+E_2)^2 - (\vec{p_1}+\vec{p_2})^2}$


    
    int main()
     {
       MyLVector c(1.000001,1.,0.,0.);
       MyLVector d(2.,1.,1.,0.);
       MyLVector e(1.000001,-1.,0.,0.);
    
       cout << "angle c, e = " << c.Angle(e) << endl; // My3Vector-Methode
       cout << "mass d = " << d.Mass() << endl; // MyLVector-Methode
       cout << "mass c+e = " << c.Mass(e) << endl; 
       ...
    
    

    Lösungsbeispiel: Header MyLVector.h, Code MyLVector.cpp, Testprogramm TLVector.cpp.

  9. Mondlandung
    Ein Spieleklassiker ist die Mondlandung:

    Erstellen Sie eine C++ Klasse für Mondfähre, welche Datenelemente, welche Methoden werden benötigt?

    Lösungsbeispiel aus Buch Coding for Fun mit C++ mondlandung.cpp.

    Modifizieren Sie das Programm, z.B. zufällige Starthöhe, zufällige Variation des Schubfaktors, etc.