- Quadratische Gleichung
Erstellen Sie ein Programm zur Lösung der quadratischen Gleichung
basierend auf obigem Beispiel
root
- Die Koeffizienten
A,B,C von standard-input lesen
- try–catch im rufenden Programm um auf die exceptions
sinnvoll
zu reagieren.
- 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.
- Template
Schreiben Sie Template Funktionen um , ,
min(),
abs() zu
berechnen.
- STL–Container
Spielen Sie mit den vorgestellten Beispielen zu den verschiedenen Containern,
Zugriffsfunktionen, Iteratoren und Algorithmen.
- 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. ) ,
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.
- 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.
-
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
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
- BigInt mit Vektoren
Benutzen Sie Vektoren für die dynamische BigInt Version.
- 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
.
- 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
-
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.