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 private Teil der Spezifikation für das Modul GUWarteschlange aus der Musterlösung definiert den uneingeschränkten abstrakten Datentyp UWarteschlange folgendermaßen:

private

subtype TIndex is Natural; -- range 1 .. Groesse

type USpeicher is array (TIndex range <>) of TElement;

type UWarteschlange (Groesse: Positive) is record

Speicher: USpeicher (TIndex'First .. Groesse);

Erstes: TIndex := TIndex'First;

Letztes: TIndex := TIndex'Last;

Anzahl: Natural := 0;

end record;

Implementieren Sie nun für diesen Datentyp die Operation

procedure Austragen (Schlange: in out UWarteschlange); -- raises:

ESchlange_leer: exception;

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


Aufgabe 2. (20 Punkte, 5 Min): Erweitern Sie den Datentyp

type TKreis is tagged record

Radius: Float;

Farbe: TColor;

end record;

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 Verkettete Listen sollten nicht als uneingeschränkt private Datentypen implementiert werden.

( ) Falsch

Grund:

( ) Richtig Klein- und Großbuchstaben sind in Ada immer vertauschbar.

( ) Falsch

Grund:

( ) Richtig Jedes Objekt vom Typ File_Type muß geöffnet werden,

( ) Falsch bevor eine andere Operation ausgeführt werden kann.

Grund:

( ) Richtig Mit einer Ausprägung von Sequential_IO

( ) Falsch können auch Textdateien geschrieben oder gelesen werden.

Grund:

( ) Richtig Jede kopfgesteuerte Schleife kann mit Hilfe einer Zählschleife simuliert werden.

( ) Falsch

Grund:

( ) Richtig Verweisobjekte befinden sich entweder auf der Halde

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

Grund:

( ) Richtig Bei der Typvererbug werden einem abstrakten Datentyp

( ) Falsch immer neue Komponenten hinzugefügt.

Grund:

( ) Richtig Ada-Prozesse haben immer eine Schnittstelle.

( ) Falsch

Grund:


Aufgabe 4. (30 Punkte, 10 Min): Schreiben Sie ein Paket, das im einbindenden Benutzerprogramm drei (beliebige) Prozesse startet.


Aufgabe 5. (20 Punkte, 10 Min): Schreiben Sie den Rumpf der Persistenzoperation Schreiben (String-Parameter als Dateiname) für den abstrakten Datentyp mit der folgenden Definition auf:

type TStapel is record

Speicher: is array (Natural range 1 .. Max) of TElement;

Index: Natural range 1 .. Max;

end record;

Benutzen Sie eine geeignete Ausprägung von Sequential_IO. Die Ausnahmen können Sie vernachlässigen.


Aufgabe 6. (20 Punkte, 10 Min): Der private Teil der Paketspezifikation MFarbensack definiert den ADT als

type TFarbensack is array (TFarbe) of Positive := (others => 0);

Implementieren Sie nun die Methoden Fuellen (schreibt eine Farbe in den Sack) und Anzahl (sagt, wie oft eine Farbe in den Sack eingetragen wurde)


Aufgabe 7. (30 Punkte, 20 Min): Ersetzen Sie die Schleife in der folgenden Prozedur mit Rekursion:

type TDaten is array (Integer range <>) of Integer;

procedure Zuruecksetzen (Feld: TDaten) is

begin

for Index in TDaten'Range loop

Feld (Index) := 0;

end loop;

end Zuruecksetzen;