Aufgaben

  1. Quadratische Gleichung
    Erstellen Sie ein Programm zur Lösung der quadratischen Gleichung

    $\displaystyle A \, x^2 + B \, x + C = 0 $

    basierend auf obigem Beispiel root

  2. Idiotensichere Fakultät
    Modizfizieren Sie ihre Funktionen zur Berechnung der Fakultät so, dass kein Überlauf mehr auftreten kann, d.h. lösen Sie eine exception aus
    throw ("Number too large")
    wenn der Wert zu gross wird.

    Hinweis: Mit LONG_MAX oder DBL_MAX (definiert in limits.h bzw. float.h) kann man die Grenzen der Zahlenbereiche abfragen. Jetzt muss man nur noch überlegen wie man's programmiert ohne dass zunächst die Grenze überschritten wird.

  3. Template
    Schreiben Sie Template Funktionen um $x^2$, $x^n$, min(), abs() zu berechnen.

  4. STL–Container
    Spielen Sie mit den vorgestellten Beispielen zu den verschiedenen Containern, Zugriffsfunktionen, Iteratoren und Algorithmen.

  5. Prim–Zahlen cont.
    Das Primzahl–Programm (Aufgabe 1.6), das abzählt wieviele Primzahlen es gibt, die kleiner als eine vorgegebene Zahl sind (z.B. $1\,000\,000$) , lässt sich wesentlich effizienter gestalten. Dazu trägt man die Primzahlen nacheinander in einen STL–Vektor und testet für alle Kandidaten nur noch die Divison mit den schon bekannten Primzahlen.

  6. Zahlen sortieren/C++11
    Implementieren Sie Aufgabe 1.15, aber diesmal mit STL Funktionen für das Speichern und Sortieren.

    (a) Zunächst noch "klassisch", d.h. mit einer for oder while loop über den Container.
    (b) Dann ohne jegliche Loop, mit den STL Iterator/copy Methoden.
    (c) Verwenden Sie C++11 Features wie auto, for-each Schleife für Ihr Programm. Verwenden Sie eine Lambda-Funktion um die Zahlen dem Betrag nach zu sortieren.

  7. Dreier-Vektoren sortieren
    Container und Algorithmen funktionieren auch für eigene Klassen/Objekte. Testen Sie das speichern in vector und sortieren mit zufällig erzeugten Dreier-Vektoren.
    Vorher aber noch den \bgroup\color{blue}$<$\egroup Operator für Dreier-Vektoren implementieren !


    
    #include <vector>  // vector headers
    #include <cstdlib>
    #include "myvec.hxx"
    using namespace std;
    int main()
    {
       vector<My3Vector> vvec; // empty <My3Vector> vector
       for ( int i = 0; i<200; i++ ) {
         // create random three-vectors
         My3Vector p( rand()*10./(RAND_MAX+1.0),
              rand()*10./(RAND_MAX+1.0),
              rand()*10./(RAND_MAX+1.0) );
         // add My3Vector at the end of the vector
         vvec.push_back( p );
       }
       // sort My3Vectors
       // ...
       // output
    
    


  8. BigInt mit Vektoren
    Benutzen Sie Vektoren für die dynamische BigInt Version.

  9. Vorwahl–Map
    In der Datei vorwahl.txt stehen alle Vorwahlen und zugehörige Orte in Deutschland. Lesen Sie die ein, speichern Sie's in einer Map und machen damit ein kleines Programm das zu einer gegebenen Vorwahl den Ort ausgibt, und umgekehrt.

    Ein Beispiel zum Zeilen-weisen Einlesen aus Datei ist in vorwahl.cpp .

  10. Poker simulieren
    Mit vector und dem random_shuffle Algorithmus kann man leicht Spiele simulieren, und damit die Wahrscheinlichkeit für bestimmte Kombinationen abschätzen (ohne sich in den Feinheiten der Kombinatorik zu verirren). Simulieren Sie z.B. das Pokerspiel, was ist die Wahrscheinlichkeit ein Full-House auf die Hand zu bekommen ?

    Lösungsbeispiel: pokerSim.C

  11. Genom Projekt
    Eine DNA Sequenz kann als Array von N Char Werten dargestellt werden (N sehr gross). Das Problem ist nun wiederkehrende Strukturen zu finden, d.h. Patterns der Länge M, wobei M fix und klein ist. In der Datei genom.txt finden Sie einen Abschnitt einer solchen DNA Sequenz. Überlegen Sie Algorithmen um signifikant häufige Patterns für vorgegebene Länge M zu finden.