I-PROGR2-HOME

Nach-Klausur PROGRAMMIEREN 2

Dozent: Döben-Henisch

10.Dez. 2003, 17:45 - 19:15 h, Raum BCN133

MATRIKELNUMMER:__________________
NAME: ________________________________________________
PUNKTE INSGESAMT: ______
NOTE: ____


1. Regularien

  1. Teilnehmer an der Klausur müssen sich durch Lichtbildausweis identifizieren.

  2. 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.

  3. Die Klausurzeit für PROGR2 beträgt 90 Min.

  4. Es gilt die Punktetabelle aus der Vorlesung Programmieren2 - SS03

  5. Das aktive Abschreiben wie auch das Zulassen von Abschreiben wird als Täuschungsversuch bewertet.

2. Aufgaben

  1. 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."

    1. Teilaufgabe - MAX.PKT: 3
      Zeichnen Sie einen Usecase im UML-Format, der das Damespiel aus Sicht der Spieler analysiert.

    2. Teilaufgabe- MAX.PKT: 4
      Beschreiben Sie die Klassen im UML-Format, mit denen Sie ihren Use Case realisieren wollen

    3. Teilaufgabe - MAX.PKT: 4
      Zeichnen Sie ein UML-Sequenzendiagramm für die Interaktion zwischen den Instanzen ihrer Klassen einschliesslich den Spielern

    4. Teilaufgabe - MAX.PKT: 5
      Übersetzen Sie die UML-Klassen in C++-Headerdateien für Klassen

    5. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

    1. 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.

    2. 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.

  6. Ausnahmebehandlung
    PKT. MAXIMAL: 8
    PKT. ERREICHT: ______


    Die Sprache C++ bietet einen eigenen Mechanismus für die Ausnahmebehandlung ('exception handling').

    1. 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.

    2. 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.

  7. 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()

    1. Teilaufgabe - MAX.PKT: 8
      Geben sie die Implementierung für die Klasse Klasse Deques an.

    2. Teilaufgabe - MAX.PKT: 2
      Schreiben Sie die Definition für die Klasse Deques als eine Definition für ein Template.