Name: _____________________________________________ Matrikel-Nr.: __________

Platz: _______ erster ( ) zweiter ( ) letzter ( ) Versuch

Pseudonym: ___________________ (nur wenn Sie möchten, daß Ihr Klausurergebnis im Internet veröffentlicht wird)

Unterlagen und Hilfsmittel sind nicht zugelassen. Kommunikation während der Klausur ist nur mit dem Dozenten erlaubt, der Mißverständnisse und Unklarheiten klären kann. Schreiben Sie die Lösungen auf diese Blätter, gegebenenfalls auf ein numeriertes leeres Blatt mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blätter (auch die Schmierblätter) ab. Für falsche oder nicht einleuchtende Lösungen bekommen Sie grundsätzlich keine Punkte. Wenn aber aus Ihren Notizen oder Bemerkungen ersichtlich ist, daß Ihr Gedankengang richtig war, können Sie Teilpunkte bekommen. Sie verlieren jedoch diese Möglichkeit, wenn Abschreiben oder Kommunikation während der Klausur nachgewiesen werden kann. Der Kern der Fragen wurde kursiv gesetzt. Neben der Punktzahl der einzelnen Aufgaben steht als Orientierung ein geschätzter maximaler Zeitaufwand (insg. 90 Minuten). Bei manchen Aufgaben steht als Orientierungder Anzahl der Programmzeilen in der Musterlösung. In den letzten 15 Minuten werden keine Fragen mehr beantwortet.

Klausurtermin: 10. 10.  1997 um 12:15 im Raum B-301

Die Klausurnote (rot) wird abwärts gerundet vergeben. Übungsnote (blau). Die Nachklausurnote (gelb) wird mit Iher Semesternote von der EDV der TFH gemittelt:

5 15 25 35 45 55 65 75 85 95 105 115 125 135 145 155 165 175 185 195

0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200

6,0 5,7 5,3 5,0 4,7 4,3 4,0 3,7 3,3 3,0 2,7 2,3 2,0 1,7 1,3 1,0


Aufgabe 1. (40 Punkte, 20 Min):

Der geschützte Teil der Klassenvereinbarung GWarteschlange (Ringpuffer) aus der Musterlösung ist folgende:

template <class TElement>

class GWarteschlange {

protected:

TElement* speicher; // wird im Konstruktor mit einem Feld besetzt

int groesse, leseindex, schreibindex, zaehler;

Implementieren Sie nun für diesen Datentyp die Operation

void austragen() throw(ESchlange_leer);

Fertigen Sie auch eine Zeichnung an, die die Aktionen Ihrer Implementierung illustriert.


Aufgabe 2. (20 Punkte, 5 Min): Erweitern Sie die Klasse

class CKreis { protected:

float radius;

color farbe;

public: ...

um eine neue Komponente naechster (der ein Verweis auf einen anderen Kreis darstellt), um Kreise verketten zu können. Erzeugen Sie 3 Kreise und fügen Sie sie in eine Kette zusammen.


Aufgabe 3. (40 Punkte, 15 Min): Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stichworten dazu. Ohne Begründung gilt Ihre Antwort als falsch.

( ) Richtig Für Klassen, die als verkettete Listen implementiert wurden,

( ) Falsch kann die Standard-Gleichheit falsches Ergebnis liefern.

Grund:

( ) Richtig Abstrakte Datentypen, die in C programmiert wurden, sind nicht wirklich abstrakt.

( ) Falsch

Grund:

( ) Richtig Ein Destruktor wird für ein Klassenobjekt nur dann ausgeführt,

( ) Falsch wenn er aufgerufen wird.

Grund:

( ) Richtig Die Typvererbung erweitert die Schnittstelle einer Klasse immer um mindestens

( ) Falsch eine Methode, die auf die Datenstruktur der Vaterklasse zugreift.

Grund:

( ) Richtig Rückruf kann in C mit Schablonen implementiert werden.

( ) Falsch

Grund:

( ) Richtig Es gibt Variablen, in die Werte unterschiedlicher,

( ) Falsch aber nicht aller Datentypen gespeichert werden können.

Grund:

( ) Richtig Ausnahmen in C++ müssen entweder abgefangen oder deklariert werden,

( ) Falsch sonst meldet der Compiler einen Fehler.

Grund:

( ) Richtig Verweisobjekte befinden sich entweder auf der Halde

( ) Falsch oder in Ausnahmefällen auf dem Stapel.

Grund:


Aufgabe 4. (30 Punkte, 10 Min): Eine Prozedur für Ereignissteuerung reagiert auf Ankommen von Meßdaten vom Typ CMessdaten über ein Port. Ihr Prototyp in der Datei STEUER.HPP ist:

void steuerung(void ankunft(CMessdaten* messdaten), void ende());

Schreiben Sie ein Hauptprogramm, das diese Daten entgegennimmt und sie in einer Datei speichert. Die Verschiebeoperationen << und >> für die Klasse CMessdaten können Sie dabei voraussetzen.


Aufgabe 5. (20 Punkte, 10 Min): Der private Teil der Klasse CFarbensack definiert ihre Daten als

int* daten; // zeigt auf das erste Element; wird vom Konstruktor mit einem Feld geladen
int anzahl; //
Anzahl der Farben - 1; 9, wenn 10 Farben

Implementieren Sie nun die Methoden fuellen (schreibt eine Farbe in den Sack) und anzahl (sagt, wie oft eine Farbe in den Sack eingetragen wurde) (ca. 4 Zeilen).

 

...


Aufgabe 6. (30 Punkte, 15 Min): Legen Sie ein Objekt der Klasse mit der Schnittstelle

class CVirtuell { public:

CVirtuell();

~CVirtuell();

void fuellen(char);

virtual void ausgabe();

}

in einem Hauptprogramm an, rufen Sie zuerst die Methode fuellen, dann die Methode ausgabe, schließlich den Destruktor auf.


Aufgabe 7. (20 Punkte, 15 Min): Implementieren Sie einen abstrakten Datentyp für char-Objekte mit Hilfe der Klasse GBehaelter aus der Musterlösung mit der Schnittstelle

template <class TElement>

class GBehaelter { protected:

TElement Inhalt; bool Gefuellt;

public: GBehaelter(): Gefuellt (false) {};

void fuellen(const TElement) throw(EBehaelter_voll);

void entleeren() throw(EBehaelter_leer);

TElement inhalt() throw(EBehaelter_leer);

bool gefuellt();

};