FH Braunschweig/Wolfenbüttel Fachbereich Informatik Prof. Dr. R. Rüdiger Wolfenbüttel, den 20. Juni 2002 Klausur Informatik I SS 02 Hinweise: • Es sind beliebige schriftliche Unterlagen als Hilfsmittel zugelassen, jedoch keine Rechner, auch keine Taschenrechner (also keine Elektronik“). ” • Die Klausur besteht aus 6 Aufgaben. Name: • Beantworten Sie die gestellten Fragen auf dieser und der folgenden Seite. Die Anzahl der vorgedruckten Kästchen muß nicht unbedingt gleich der Zahl der einzutragenden Ergebnisse sein. Auf die genaue Wiedergabe von Leerzeichen (blanks) brauchen Sie in keiner Aufgabe zu achten. Freiversuch (F0) oder F1/F2/F3-Prüfung? bitte ankreuzen: Vorname: Mat.-Nr.: F0 F1 F2 F3 erreichte Punktzahl/Note: WICHTIG: Entscheidend für die Bewertung sind die Ergebnisse, die Sie auf den ersten beiden Blättern eingetragen haben. Geben Sie aber bitte alle Blätter mit ab, die Ihre Vorüberlegungen und Zwischenergebnisse zeigen (jedes Blatt mit Namen, Vornamen und Matrikelnummer versehen). Ihre Ergebnisse: Aufgabe 1 Bitte ankreuzen: Zeile 37 38 39 40 41 42 43 44 45 46 47 48 Aufgabe 2 Die Ausgabe ist: Zeile 37 44 46 (Punktzahl: 6/24) richtig falsch Aufgabe 3 (Punktzahl: 3/24) Die Array-Belegungen lauten (ab Komponente zum Index 1): a) b) c) Aufgabe 4 Zahl (Punktzahl: 3/24) Ausgabe 246H A36 1A1B1C1D1E 10,0 .234 1.D+01 1.0E99999 1.0E+FF (Punktzahl: 4/24) falsch wenn richtig: integer real Aufgabe 5 (Punktzahl: 6/24) a) Wirkung: Die Prozedur R(i) . . . . . . . . . . . . . . Aufgabe 6 a) .......................................... b) . . . . . . ≤ B ≤ . . . . . . c) Ausgabe nach Aufruf des Kommandos in Zeile Zeile Zeile Zeile 20: 21: 22: 23: Index 0: 1: 2: 3: 4: 5: (Punktzahl: 2/24) Werte im Array b) Wert von n: . . . . . . Aufgabe 1 (Punktzahl: 6/24) In welchen der Zeilen 37 bis 48 sind die Zuweisungen bzw. Prozeduraufrufe richtig, d.h., entsprechen den Typregeln von Oberon, in welchen sind sie falsch? Kreuzen Sie bitte in der Tabelle entsprechend an. Der Deklarationsteil dieses Programms gilt als fest vorgegeben und ist (definitionsgemäß) richtig. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 MODULE KlausurAufgabe1; CONST N = 10; TYPE Array = ARRAY N OF CHAR; Record = RECORD END; Function = PROCEDURE (x: REAL): REAL; VAR b: BOOLEAN; x: INTEGER; y: LONGINT; z: REAL; s: ARRAY 64 OF CHAR; A, B: Array; C: ARRAY N OF CHAR; e: RECORD END; f: Function; 18 19 20 21 24 25 28 29 30 32 33 34 35 PROCEDURE Test*; BEGIN (* geeignete Initialisierung der Variablen . . . *) (* spielt für die Fragen keine Rolle *) 36 37 38 39 40 41 42 43 45 46 47 48 PROCEDURE Q(f: Function); BEGIN END Q; PROCEDURE R(s1: ARRAY OF CHAR; VAR s2: ARRAY OF CHAR); BEGIN END R; 31 44 PROCEDURE P(r: Record); BEGIN END P; 22 23 27 49 50 51 26 Bewertung: Anzahl richtiger Antworten: 12 11 10 9 8 7 6 Punkte: 6 6 5 4 3 2 1 b := ”FALSE ”; b := x < y; b := (x = y) & (s < ”0 ”); s := s + ”abc”; R(”abc”, s); R(s, ”abc”); x := y; z := y; A := B; B := C; P(e); Q(f); END Test; END KlausurAufgabe1. Aufgabe 2 (Punktzahl: 3/24) Was wird durch das folgende Programm ausgegeben nach Aktivierung von KlausurAufgabe2.Start? Hinweis: Die Ausgabe erfolgt in den Zeilen 37, 44 und 46. 1 2 3 4 5 MODULE KlausurAufgabe2; IMPORT Out; CONST min = MIN(SET); max = MAX(SET); fullSet = {min .. max}; emptySet = {}; 6 INC(i) END; RETURN n END C; 26 27 28 29 30 PROCEDURE Start*; VAR s, s1, s2: SET; i, j: INTEGER; BEGIN s1 := fullSet − {3 .. 6}; s2 := {2, 4 .. 8, 10}; Show(s1 * s2); 31 PROCEDURE Show(s: SET); VAR i: INTEGER; BEGIN IF s = emptySet THEN Out.String(”empty ”) ELSE FOR i := min TO max DO IF i IN s THEN Out.Int(i, 4) END END END; Out.Ln END Show; 7 8 9 10 11 12 13 14 15 16 17 18 32 33 34 35 36 37 38 s := emptySet; i := 4; j := 10; WHILE i < j DO INC(i); DEC(j); s := s / {i .. j} END; Show(s); 39 40 41 42 43 44 19 PROCEDURE C(s: SET): INTEGER; VAR i, n: INTEGER; BEGIN n := 0; i := min; WHILE s # emptySet DO IF i IN s THEN s := s − {i}; INC(n) END; 20 21 22 23 24 25 45 Out.Int(C(−{2, 4 .. 6}), 4); END Start; 46 47 48 49 50 END KlausurAufgabe2. KlausurAufgabe2.Start ˜ (Punktzahl: 3/24) Aufgabe 3 Die folgenden Elemente sollen in eine Prioritätswarteschlange, die als Heap realisiert sein möge, Element für Element eingeordnet werden (Prozedur Insert). Wie sieht dann jeweils am Ende die entsprechende Array-Belegung ab Index 1 aus? Es gilt die Konvention der Vorlesung: je kleiner die Zahl umso höher die Priorität. a) 2 9 4 6 8 1 b) 4 3 8 5 9 10 12 2 c) 9 8 7 6 5 4 3 2 1 1 Aufgabe 4 (Punktzahl: 4/24) Welche der in der vorne abgedruckten Tabelle angegebenen Zahlen sind entsprechend der OberonSyntax formal richtig gebildet, welche der richtig gebildeten Zahlen gehören zur Kategorie integer, welche zu real im Sinne dieser Syntaxregeln? Kreuzen Sie bitte entsprechend an. Hinweise: • Der folgende Ausschnitt aus der Oberon-Syntax ist hier von Bedeutung: number integer hexDigit real ScaleFactor digit = = = = = = • Bewertung: integer | real. digit {digit} | digit {hexDigit} "H". digit | "A" | "B" | "C" | "D" | "E" | "F". digit {digit} "." {digit} [ScaleFactor]. ("E" | "D") ["+" | "-"] digit {digit}. "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9". Anzahl richtiger Antworten: 8 Punkte: 4 7 6 4 3 5 4 2 1 Aufgabe 5 (Punktzahl: 6/24) a) Was ist die Wirkung der Prozedur R(i) in dem abgedruckten Programm? (Antwort in einem möglichst kurzen Satz) b) In welchem Intervall muß B liegen, damit das Programm sinnvoll arbeitet? c) Was ist jeweils die Ausgabe, wenn das Programm nacheinander mit den Kommandos in den Zeilen 20, 21, 22 und 23 gestartet wird? 1 2 3 MODULE KlausurAufgabe5; IMPORT In, Out; VAR B: INTEGER; 8 9 10 15 17 5 7 14 16 4 6 13 PROCEDURE R(i: INTEGER); BEGIN IF i >= B THEN R(i DIV B) END; Out.Int(i MOD B, 1) END R; 18 PROCEDURE Start*; VAR x: INTEGER; BEGIN In.Open; In.Int(B); In.Int(x); R(x) END Start; END KlausurAufgabe5. 19 20 21 22 11 23 12 24 KlausurAufgabe5.Start KlausurAufgabe5.Start KlausurAufgabe5.Start KlausurAufgabe5.Start Aufgabe 6 5 7 9 6 42 67 88 15 ˜ ˜ ˜ ˜ (Punktzahl: 2/24) a) Welche Werte stehen in dem Array A am Ende, nachdem das Kommando KlausurAufgabe6.Start mit den im Programm in Zeile 26 angegebenen Parametern aktiviert wurde. Alle Komponenten des Arrays seien mit 0 initialisiert. (Die entsprechende Prozedur ist im Programm weggelassen.) Füllen Sie die Tabelle vollständig aus, auch mit den Nullen, die nicht überschrieben werden. b) Welchen Wert hat der Parameter n am Ende der Prozedur Start? 1 2 3 4 5 MODULE KlausurAufgabe6; IMPORT In, Out; CONST N = 6; VAR A: ARRAY N OF INTEGER; 6 7 8 9 10 11 12 13 14 15 PROCEDURE P(i: INTEGER; VAR n: INTEGER); VAR x: INTEGER; BEGIN In.Int(x); IF In.Done & (i < N) THEN P(i+1, n); INC(n); A[n] := 2*x + 1 ELSE n := −1 END END P; 16 17 18 19 20 21 22 PROCEDURE Start*; VAR n: INTEGER; BEGIN In.Open; P(0, n); (* zu Frage b) *) Out.Int(n, 4); Out.Ln END Start; 23 24 END KlausurAufgabe6. 25 26 27 KlausurAufgabe6.Start 3 2 4 1 ˜