10.Dez. 2003, 17:45 - 19:15 h, Raum BCN133
MATRIKELNUMMER:__________________
NAME:
________________________________________________
PUNKTE
INSGESAMT: ______
NOTE: ____
Teilnehmer an der Klausur müssen sich durch Lichtbildausweis identifizieren.
Es dürfen nur leere Blätter, Schreibgeräte und Taschenrechner benutzt werden. Alle Blätter müssen mit Name und Matr.Nummer gekennzeichnet sein. Blätter ohne Kennzeichen werden nicht berücksichtigt.
Die Klausurzeit für PROGR2 beträgt 90 Min.
Es gilt die Punktetabelle aus der Vorlesung Programmieren2 - SS03
Das aktive Abschreiben wie auch das Zulassen von Abschreiben wird als Täuschungsversuch bewertet.
MODELLIERUNG
PKT.
MAXIMAL: 16 + 12
PKT. ERREICHT: ______
Als Anwendungsfall
sei das Damespiel (nach deutschen Regeln) gegeben. Folgende
Beschreibung liegt vor:
"Gespielt wird mit einem
Schachbrett; auch die beim Schach üblichen Bezeichnungen der
Felder mit Buchstaben und Zahlen wurden beim Damespiel übernommen.
Das Brett wird zwischen den beiden Partnern so auf den Tisch gelegt,
dass jeder in der vorderen Reihe links ein schwarzes Eckfeld vor
sich hat. Zwölf schwarze und zwölf weiße Spielsteine
sind notwendig. Jeder setzt seine Steine auf die schwarzen Felder
des Spielbrettes in den drei ihm zugekehrten ersten Reihen. In jeder
dieser Reihen stehen also vier Steine.
Spielgedanke: Beide
Parteien rücken mit ihren Steinen aufeinander los und
versuchen, sämtliche Steine des Gegners zu schlagen oder
bewegungsunfähig zu machen. Die Steine werden abwechselnd in
einem Zug vorwärts bewegt, und zwar nur diagonal, d.h. von
einem schwarzen Feld auf das übereck angrenzende nächste
schwarze Feld. Auf die weißen Felder darf nicht gezogen
werden, ebenso sind Rückwärtsbewegungen verboten
(Ausnahme: Dame, siehe weiter unten). Geschlagen wird ebenfalls
diagonal. Der schlagende Stein muss den zu schlagenden dabei
überspringen, d.h. über ihn hinweg auf ein freies Feld
springen. Geschlagene Steine werden aus dem Spiel genommen.
Hat
ein Stein der eigenen Partei ein Feld der gegnerischen Randreihe
erreicht, wobei es keine Rolle spielt, ob er ziehend oder schlagend
dorthin gelangt ist, gilt er vom nächsten Zug an als "Dame"
und wird mit einem zweiten, ausgeschiedenen Stein "gedoppelt".
Die Dame kann sich vor- und rückwärts bewegen, und zwar in
der einmal eingeschlagenen Diagonalrichtung beliebig weit. Sie
beherrscht also von ihrem Standort aus zwei sich kreuzende
Diagonalen und muss jeden Stein schlagen, der sich auf ein Feld
dieser Kreuzung wagt - vorausgesetzt, es ist, von der Dame aus
gesehen, hinter ihm mindestens ein Feld frei. Die Dame braucht sich
nach dem Schlagen nicht auf einem Feld hinter dem geschlagenen Stein
niederzulassen, sie darf, wenn weitere freie Felder vorhanden sind,
noch beliebig weiterziehen. Steine der eigenen Partei darf die Dame
aber nicht überspringen.
Wichtige Regeln: Wer einen Stein
berührt, muss (wie beim Schach) auch mit ihm ziehen - es sei
denn, er erklärt ausdrücklich, ihn nur zurechtrücken
zu wollen. Wer die Möglichkeit zum Schlagen einer Dame oder
eines Steines ( oder auch mehrerer Steine hintereinander) hat, muss
sie ausnützen. Tut er das nicht, darf der Gegner den
betreffenden Stein "blasen", d.h. einfach vom Brett
nehmen. Das Blasen gilt nicht als Zug. Es muss also auch dann
geschlagen werden, wenn der schlagende Stein dadurch selbst in eine
gefährdete Position gerät. Das Recht des Blasens muss
nicht ausgenützt werden. Der betreffende Spieler kann von
seinem Gegner auch verlangen, den falschen Zug zurückzunehmen
und statt dessen den richtigen zu machen. Hat bei Spielende ein
Spieler drei Damen, der andere eine, die auf der Diagonale A1-H8
steht, wird die Partie als unentschieden ("remis")
abgebrochen, falls der dreifache Damenbesitzer die Einzeldame nicht
beim nächsten Zug schlagen kann."
Teilaufgabe
- MAX.PKT: 3
Zeichnen Sie einen Usecase im
UML-Format, der das Damespiel aus Sicht der Spieler analysiert.
Teilaufgabe-
MAX.PKT: 4
Beschreiben Sie die Klassen im
UML-Format, mit denen Sie ihren Use Case realisieren wollen
Teilaufgabe
- MAX.PKT: 4
Zeichnen Sie ein UML-Sequenzendiagramm
für die Interaktion zwischen den Instanzen ihrer Klassen
einschliesslich den Spielern
Teilaufgabe
- MAX.PKT: 5
Übersetzen Sie die UML-Klassen in
C++-Headerdateien für Klassen
Teilaufgabe - MAX.PKT: pro implementierte Funktion bis zu 4 Punkte (maximal 3 Funktionen werden bewertet)
Schreiben Sie eine C++-Implementierung für Funktionen aus ihrer Headerdatei.
Konstruktoren
PKT.
MAXIMAL: 6
PKT. ERREICHT: ______
Beschreiben Sie, was ein
Copy-Konstruktor und eine Copy-Assignment-Operator
ist. Zeigen Sie, wie man mit diesen Konstruktoren Kopien von solchen
Objekten generieren kann, die Instanzen ihrer Klassen bilden.
Abgeleitete
Klassen
PKT. MAXIMAL: 3
PKT. ERREICHT: ______
Sie
haben für die Modellierung des Damespiels Klassen eingeführt.
Konstruieren Sie dazu mindestens eine neue Klasse so, dass ihre
Klassen im Vergleich zu dieser neuen Klasse abgeleitete Klassen
sind.
Friend-Funktion
PKT.
MAXIMAL: 5
PKT. ERREICHT: ______
Für die Bewertung
einer Stellung im Damespiel kann man die Anzahl der noch vorhandenen
Steine zählen. Geben Sie eine Funktion in der Sprache C++
an, die die Anzahl der weissen und schwarzen Steine zählt und
die als Friend-Funktion zu den von ihnen eingeführten
Klassen realisiert ist.
Ein-Ausgabe
mit Dateien
PKT. MAXIMAL: 16
PKT. ERREICHT: ______
Damit
die Damespieler ihr Spiel anschliessend besser auswerten können,
soll während jeden Spieles eine Log-Datei geschrieben werden.
Auf Wunsch kann diese dann anschliessend gelesen werden.
Teilaufgabe
- MAX.PKT: 8
Schreiben Sie eine Funktion in C++, die
eine neue Datei zum Schreiben öffnet. Bauen Sie in
diese Funktion eine Fehlerbehandlung für den Fall ein,
dass bei diesem Vorgang Fehler auftreten. Diese Funktion soll Teil
der Klassen sein, die Sie bei der Modellierung des Damespiels
entwerfen.
Teilaufgabe
- MAX.PKT: 8
Schreiben Sie eine Funktion in C++, die
eine bestehende Datei zum Lesen öffnet und die
einzelnen Züge auf dem Bildschirm ausgibt. Bauen Sie in diese
Funktion eine Fehlerbehandlung für den Fall ein, dass
bei diesem Vorgang Fehler auftreten. Diese Funktion soll Teil der
Klassen sein, die Sie bei der Modellierung des Damespiels
entwerfen.
Ausnahmebehandlung
PKT.
MAXIMAL: 8
PKT. ERREICHT: ______
Die Sprache C++
bietet einen eigenen Mechanismus für die Ausnahmebehandlung
('exception handling').
Teilaufgabe
- MAX.PKT: 4
Geben Sie anhand einer Programmskizze die drei
Schlüsselwörter an, die für die Ausnahmebehandlung
wichtig sind und erläutern Sie kurz, wie diese drei Elemente
zusammenwirken können, um eine Ausnahmebehandlung zu
realisieren.
Teilaufgabe
- MAX.PKT: 4
Erläutern Sie anhand einer
Programmskizze, wie Sie in C++ ihre eigene Ausnahmebehandlung
realisieren könnten, die immer dann aktiviert wird, wenn eine
Ausnahme auftritt.
Templates
PKT.
MAXIMAL: 13
PKT. ERREICHT: ______
In C++ gibt es die
Möglichkeit, parametrisierte Klassen (:= Templates) zu
definieren.
i. Teilaufgabe - MAX.PKT: 3
Geben Sie eine
Klassendefinition für eine Klasse Deques für
Objekte vom Typ 'int' an; bei einem Deques kann man sowohl am
Ende ('back') als auch am Anfang ('front') Elemente mit push hinzufügen oder mit pop entfernen. Mit dem Befehl resize kann
man die Anzahl der Elemente festlegen. Definieren Sie in ihrer Klassen folgende Funktionen:
push_back()
pop_back()
push_front()
pop_front()
resize()
Teilaufgabe
- MAX.PKT: 8
Geben sie die Implementierung für die
Klasse Klasse Deques an.
Teilaufgabe
- MAX.PKT: 2
Schreiben Sie die Definition für die
Klasse Deques als eine Definition für ein Template.