Dr. Matthias Grabert Abteilung Angewandte
Informationsverarbeitung 27. Mai 2004
Claudia Fischer Blatt 4
C++ mit Data Mining Anwendungen (SS 2004)
Abgabetermin: 3. Juni 2003
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.
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