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 alstype 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;