Klausur Informatik I

Werbung
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 ˜
Herunterladen