Nächste Seite: Über dieses Dokument ...
8. Übung des Programmierpraktikums (MATH)
Abgabetermin: 30. Juni 2009, 23:59 Uhr
Die Übungen sind grundsätzlich allein zu machen.
Gruppenarbeit ist nicht erlaubt.
Abzugeben sind jeweils die sinnvoll dokumentierten
Programmfiles
(Files für Bsp. 5: bsp_5.cpp, bsp_5_fkt.cpp, bsp_5_fkt.hpp )
indem Sie diese in Ihr Verzeichnis im globalen Abgabeordner kopieren.
- Ersetzen Sie die statischen C-Felder in Aufg. 19 (6. Übung) durch die
Vektorklasse
vector<double> welche eine dynamische Länge
des Vektors während der Laufzeit erlaubt, siehe dazu
§2.3.4
des Skriptes.
Schreiben Sie Ihre Funktionen aus Aufg. 19 für obige Vektorklasse um und
speichern Sie diese separat in Header- und Quelltextfile (3 Files sind abzugeben!).
Benutzen Sie dabei die Methode size der Vektorklasse.
Erschließen Sie sich die Funktionsweise der Methoden
push_back
und
pop_back
der Vektorklasse. Probieren Sie diese Methoden aus.
Eingabedaten (n): (4), (20), (31553)
- Schreiben Sie eine Klasse DATUM, welche Tag, Monat und Jahr
speichert.
Implementieren Sie (Header- und Sourcefile in bsp_30_fkt.hpp und bsp_30_fkt.cpp)
alles so, daß das folgende
Programm
funktioniert.
Hinweis:
Implementieren Sie entweder zuerst den «-Operator für Ihre Klasse
DATUM oder
kommentieren Sie die entsprechenden Zeilen im Programm anfangs aus.
Ansonsten erscheinen lange, kryptische Fehlermeldungen beim Kompilieren.
- Implementieren Sie eine Klasse für die Koeffizienten eines
Polynoms vom Grad n. Diese Klasse sollte neben
Standard-, Kopierkonstruktor und Destruktor
einen Parameterkonstruktor mit einem Filenamen als Parameter enthalten.
Letzterer liest die Daten von einem File ein, siehe
(§ 9.2 des Skriptes).
Weiters sollten Zuweisungs- und Ausgabeoperator implementiert werden.
Die Auswertung des Polynoms
pn(
x) =
ak . xk
in einem Punkt x ist als Methode der Klasse zu realisieren.
Werten Sie das Polynom in einer zweiten Methode über das HORNER-Schema aus.
Speichern Sie Klassendeklaration und -implementierung in den Files
bsp_31_fkt.hpp und bsp_31_fkt.cpp.
Testdaten (Filename, x):
(data_31_a.txt,
3.78),
(data_31_b.txt,
-1.0087),
(data_31_c.txt,
-0.945),
Die ASCII-(Text-)Files enthalten n und ak,
k = 0,..., n.
- Erweitern Sie Ihre Klasse aus Aufg. 31 so, dass
- die Klassenmember nur innerhalb der Methoden der Klasse sichtbar sind,
- die Member über (Inline-)Methoden gelesen werden können,
- alle Methoden, welche die Member nicht verändern, als solche gekennzeichnet werden.
Schreiben Sie ein kleines Testprogramm dafür.
- Implementieren Sie eine Klasse Sparschwein,
welche folgende Datenelemente besitzt:
- Zähler für vier Arten von Geldstücken (1-Cent, 10-Cent, 50-Cent, 1-Euro)
- Die maximale Anzahl von Geldstücken die ins Sparschwein passen.
- Ein Flag, welches anzeigt, ob das Sparschwein aufgebrochen wurde.
Die Klasse soll die folgenden Methoden besitzen:
- init(...) initialisiert ein leeres Sparschwein,
- add1Cents(...) wirft eine Anzahl 1-Cent-Münzen hinein,
- add10Cents(...), add50Cents(...), add1Euro(...) wie oben,
- isEmpty(...) überprüft, ob das Sparschwein leer ist,
- isFull(...) überprüft, ob das Sparschwein voll ist,
- isBroken(...) überprüft, ob das Sparschwein geknackt wurde,
- breakInto(...) bricht das Sparschwein auf, und liefert die
gesparte Geldsumme zurück.
Benutzen Sie Header- und Sourcefile zur Implementierung der Klasse.
Das Hauptprogramm (ein weiteres Sourcefile) soll Münzen solange in das
Sparschwein einwerfen, bis dieses voll ist und es dann knacken.
Zeigen Sie den angesammelten Betrag an.
Werfen Sie danach noch 37 Cent in das Sparschwein und knacken Sie es erneut
(Wieviel Geld ist drin?).
- Nutzen Sie für diese Aufgabe die Klassen string und vector aus der STL.
Schauen Sie sich dazu §2.3.1 und §2.3.4 des Vorlesungsskriptes
(bzw. string
und vector)
an. Zu vector können Sie sich auch ein Bsp. in §3.3.1 des
Download-Buches von
Breymann
und zu string die Vorlesung von
Schröder
anschauen.
Deklarieren Sie eine Klasse zur Darstellung eines Handys,
das durch einen Gerätenamen,
den Namen des Besitzers, die Telefonnummer und die monatliche Grundgebühr
charakterisiert ist.
Diese Klasse soll außer den üblichen Konstruktoren (falls diese nötig sind)
Zugriffsmethoden auf die Member enthalten und die gesamten Daten zum Handy
ausgeben können.
Nutzen Sie diese Handy-Klasse, um sich ein Adressbuch Ihrer Freunde anzulegen
(Sie sollten mehr als 5 haben). Wie wäre es mit einer Klasse Adressbuch?
Lesen Sie die unsortierten Datensätze von einem File ein und nutzen Sie evtl. die Funktion
getline
zum Einlesen ganzer Zeilen inklusive der Leerzeichen.
Geben Sie Ihr sortiertes Adressbuch aus
(Tip: in den oben gegebenen www-Referenzen nach einem Algorithmus sort suchen).
Speichern Sie Klassendeklaration und -implementierung in den Files
bsp_34_fkt.hpp und bsp_34_fkt.cpp. Geben Sie auch Ihr(e) Datenfile(s)
bsp_34_data.txt ab.
generelle Hinweise:
Die Befehle break, continue, goto
sind nicht erlaubt.
Abgabe der Lösungen:
Die Abgabe der Lösungen (*.cpp-Files, *.hpp, ...,
keine exe-Files)
erfolgt ausschließlich durch das Kopieren dieser Files
in Ihr (beim erstenmal anzulegendes) Verzeichnis
Nachname_Vorname im globalen Abgabeordner
y: \\pers.ad.uni-graz.at\fs\ou\621\stud_haase\Nachname_Vorname .
Hinweise hierzu sind unter der
LV-Homepage
zu finden.
Die Filenamen müssen dem Schema bsp_nummer,
gefolgt von der Filextension, entsprechen. Z.B. ist in Beispiel 1 das File
bsp_1.cpp abzugeben.
Andere Filebezeichner zählen als nicht abgegebene Files.
Nächste Seite: Über dieses Dokument ...
Gundolf Haase
2009-05-29