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 alsint* daten; //
zeigt auf das erste Element; wird vom Konstruktor mit einem Feld geladenImplementieren 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 Schnittstelletemplate <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();
};