Dr. Matthias Grabert Abteilung Angewandte Informationsverarbeitung 27. Mai 2004
Claudia Fischer Blatt 4


Uni Logo



C++ mit Data Mining Anwendungen (SS 2004)


Abgabetermin: 3. Juni 2003

Schon wieder große Zahlen (3 Punkte)

Erzeugen Sie eine Klasse 'bigint' basierend auf dem Template für große natürliche Zahlen aus dem vorigen Übungsblatt. Man sollte auf den Elementen der Klasse die Operatoren + ,- , *, /, % (für den Modulo- Operator), ++ und $-$ anwenden können. Außerdem soll ein Operator für die Ausgabe ($«$- Operator) existieren.

Primzahlen

In dieser Aufgabe sollen Sie eine Klasse 'prime' für Primzahlen schreiben. Diese soll einen Konstruktor besitzen, dem eine Integer übergeben wird. Ist diese Integer nicht prim, so kommt es zu einer Exception. Außerdem sollen folgende Operationen auf der Klasse definiert sein:

value()
liefert die Primzahl als Integer
operator++(int) und operator++()
springt zur nächsten Primzahl (die nun vom Objekt repräsentiert wird) und gibt eine Referenz auf das Objekt zurück
Bsp.: Wenn p die Primzahl 3 repräsentiert, dann repräsentiert p nach p++ die Primzahl 5.
operator$-$(int) und operator$-$()
springt zur vorigen Primzahl (die nun vom Objekt repräsentiert wird) und gibt eine Referenz auf das Objekt zurück
Bsp.: Wenn p die Primzahl 3 repräsentiert, dann repräsentiert p nach p$-$ die Primzahl 2.
operator+(int i) und operator+(int i, prime&)
gibt die i-nächste Primzahl zurück; das Objekt ändert sich dabei nicht.
Bsp.: Wenn p die Primzahl 3 repräsentiert, dann repräsentiert p+3 bzw. 3+p die Primzahl 11.
operator-(int i)
gibt die i-vorige Primzahl zurück; das Objekt ändert sich dabei nicht.
Bsp.: Wenn p die Primzahl 7 repräsentiert, dann repräsentiert p-3 die Primzahl 2.

Es soll einen Vektor aller bisher bestimmten Primzahlen geben, der von alle Instanzen der Klasse benützt wird. Dieser enthält lückenlos alle Primzahlen bis zur größten bisher bestimmten. Verwenden Sie hierzu die Klasse vector, die in der Datei vec.h definiert ist. Nun ist es auch leicht eine Methode by_index(int i) der Klasse prime zu implementieren, die dem Objekt die i-te Primzahl zuweist. (Die Zählung soll bei 0 beginnen.)
Schreiben Sie außerdem einen Ausgabe- Operator (&operator$«$(ostream&, prime)) für die Klasse und eine Funktion, die aus den bisher gefunden Primzahlen alle Primzahlzwillinge liefert. (Primzahlzwillinge sind zwei Primzahlen, deren Differenz zwei ist.)

Wie immer sollten Sie auch ein kleinen Programm schreiben, das alles testet.

Anmerkung:
Das 'int' beim operator++ bzw. operator$-$ dient zur Unterscheidung zwischen ++p und p++. Der operator++(int) wird bei p++ aufgerufen, operator++() bei ++p.

Viel Erfolg!



Claudia Fischer 2004-05-27