Name: _____________________________________________ Matrikel-Nr.: __________

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

Pseudonym: __________________ (nur wenn Sie möchten, daß Ihr Klausurergebnis als Aushang 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: 20. Juni 1997 um 12:15 im Raum B-301

Ergebnisse: 27. Juni 1997 um 12:15 im Vorlesungsraum

Die Klausurnote (rot) wird abwärts gerundet vergeben. Übungsnote (blau), Semesternote (gelb):

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, ca. 7 Programmzeilen):

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 Eintragen (Schlange: in out UWarteschlange; Element: in TElement); -- raises:

ESchlange_voll: exception;

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

Lösung auf dem Extrablatt Nr. _________ ( 0 5 10 15 20 25 30 35 40 )


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

type TGeraet is tagged record

Beschreibung: String := "";

end record;

um eine neue Komponente Ersatz, der ein Verweis auf ein anderes Gerät darstellt.

Lösung:

( 0 5 10 15 20 )

Name: _____________________________________________ Matrikel-Nr.: __________


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 sollen nur als eingeschränkt private Typen implementiert werden.

( ) Falsch

Grund:

( ) Richtig Ein dazwischengeschobenes Leerzeichen verändert den Wert eines Ganzzahlliterals nicht.

( ) Falsch

Grund:

( ) Richtig Jedes Objekt vom Typ File_Type beinhaltet genau eine Datei auf der

( ) Falsch Festplatte oder auf der Diskette.

Grund:

( ) Richtig Mit einer Ausprägung von Sequential_IO.Float_IO können keine Dateien beschrieben werden.

( ) Falsch

Grund:

( ) Richtig Jede Schleife kann mit Hilfe von Rekursion simuliert werden.

( ) Falsch

Grund:

( ) Richtig Es gibt Verweise, die Objekte unterschiedlicher, aber nicht aller Datentypen referieren können.

( ) Falsch

Grund:

( ) Richtig Die Anzahl der Wiederholungen in einer Zählschleife steht bei der Übersetzung fest.

( ) Falsch

Grund:

( ) Richtig Jeder Ada-Prozeß wird mit Hilfe eines Pakets realisiert.

( ) Falsch

Grund:

( 0 5 10 15 20 25 30 35 40 )


Aufgabe 4. (30 Punkte, 10 Min, ca. 7 Programmzeilen): Entwickeln Sie ein exportloses Paket, das im Benutzerprogramm ein Prozeß startet, von dem der Benutzer nichts merkt.

Lösung:

Fortsetzung auf dem Extrablatt Nr. _________ ( 0 5 10 15 20 25 30 )


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

type TMultibehaelter 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.

Lösung auf dem Extrablatt Nr. ________________ ( 0 5 10 15 20 )


Aufgabe 6. (20 Punkte, 10 Min, ca. 4 Programmzeilen): Definieren Sie die Datenstruktur des Pakets MZahl_Eimer mit Hilfe des Datentyps Long_Integer so, daß es auch größere Ganzzahlen als Long_Integer'Last verarbeiten kann.

( 0 5 10 15 20 )


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

type TFeld is array (Natural range <>) of Integer;

procedure Verdoppeln (Feld: TFeld) is

begin

for Index in TFeld'Range loop

Feld (Index) := 2 * Feld (Index); -- raises Constraint_Error

end loop;

end Verdoppeln;

Lösung :

( 0 5 10 15 20 25 30 )