Prof. Dr. R. Rüdiger Name: Fachhochschule Braunschweig/Wolfenbüttel Fachbereich Informatik Vorname: Matrikelnummer: Punkte: /24 = FP erstmalig: % Note: 1./2. Wiederholung: Klausur im WS 95/96 zur Informatik I am 11. Januar 1996 Hinweise: • Bitte jedes Blatt einzeln mit Ihrem Namen und der Nummer der bearbeiteten Aufgabe bezeichnen. • Es sind beliebige schriftliche Unterlagen zugelassen, jedoch keine Rechner. Klausurabgabetermin ist 1230 Uhr. • Sie können farbige Stifte verwenden, jedoch kein Rot. • Die vorgedruckten Tabellen in einigen der Aufgaben, in die Ausgabewerte einzutragen sind, geben nicht unbedingt die richtige Anzahl an Werten wieder. Diese herauszufinden bleibt Ihnen überlassen. • Maßgeblich für die Beantwortung der Fragen ist die Sprachbeschreibung von Oberon bzw. Oberon-2 auf der Basis der Vorlesung und des Buches: M. Reiser, N. Wirth Programmieren in Oberon. Das neue Pascal. Aufgabe 1 (Punktzahl: 4/24) Entscheiden Sie von den folgenden Zuweisungsanweisungen, ob diese syntaktisch falsch oder richtig sind, und geben Sie gegebenenfalls, falls diese richtig sind, den Ergebniswert (FALSE oder TRUE) an. Die Variablen i bzw. b seien vom Typ INTEGER bzw. BOOLEAN. Anweisung b b b b b b b b := := := := := := := := entweder ד für ” syntaktisch falsche Anweisung oder sonst TRUE/FALSE 3 + 4; TRUE OR TRUE; ODD(i) & ODD(INC(i)); i < (i + 3); b # b; b := ~b; "a" <= "c"; Math.sin(Math.pi) < -0.5; Aufgabe 2 (Punktzahl: 3/24) Schreiben Sie eine Funktionsprozedur mit dem Prozedurkopf PROCEDURE IsInteger(i: LONGINT): BOOLEAN; die entscheidet, ob die Zahl i im Bereich liegt, der durch den Datentyp INTEGER festgelegt ist. Das Ergebnis sei TRUE, wenn das der Fall ist, andernfalls FALSE. Es sollen dabei keine (implementierungsabhängigen) konstanten Werte verwendet werden! Bitte wenden . . . . . . Aufgabe 3 (Punktzahl: 3/24) a) Kreuzen Sie in der folgenden Tabelle an, ob die aufgeführten Zahlen gemäß der Sprachdefinition von Oberon richtig gebildet sind. Zahl Bildung der Zahl ist richtig nicht richtig 0.31415 1E+2 123ABCH 456EFGH b) Ist die folgende Aussage richtig? Begründen Sie Ihre Antwort in einem kurzen Satz. In der Syntax für die Zahlenbildung kommen negative Zahlen nicht vor. Negative Zahlen können daher in Oberon-Programmen nicht verwendet werden; eine Zuweisung der Form x := -3.1415; ist nicht möglich. Aufgabe 4 (Punktzahl: 3/24) MODULE KlausurAufgabe; IMPORT Out; PROCEDURE Start*; VAR M: SET; i, n: INTEGER; BEGIN n := 2; M := {}; WHILE M # {1 .. n} DO FOR i := 1 TO n DO IF i IN M THEN Out.Int(n+i, 5) ELSE Out.Int(n-i, 5) END END; Out.Ln; i := n; WHILE (i > 1) & (i IN M) DO M := M - {i}; DEC(i) END; M := M + {i} END END Start; Tragen Sie die Werte in die vorgedruckte Tabelle ein, die das nebenstehend abgedruckte Programm ausgibt. ... ... BEGIN END KlausurAufgabe. Aufgabe 5 MODULE KlausurAufgabe; IMPORT Out; PROCEDURE g(j, k: INTEGER): LONGINT; BEGIN IF k > 0 THEN RETURN (g(j, k - 1)*(j - k + 1)) DIV k ELSE RETURN 1 END END g; PROCEDURE Start*; VAR N, n: INTEGER; BEGIN N := 6; FOR n := 0 TO N DIV 2 DO Out.Int(g(N, n), 5) END END Start; BEGIN END KlausurAufgabe. (Punktzahl: 2/24) Welche Werte werden durch das nebenstehende Programm nach dem Aufruf des Kommandos KlausurAufgabe.Start ausgegeben? ... Aufgabe 6 (Punktzahl: 4/24) Gegeben sei das folgende Programm: MODULE KlausurAufgabe; IMPORT Out; VAR i: INTEGER; PROCEDURE P(i: INTEGER); PROCEDURE Q(i: INTEGER); BEGIN Out.Int(i-1, 5) END Q; BEGIN Q(2*i) END P; a) Zeichnen Sie unter Verwendung geschachtelter Blöcke — analog zur Vorlesung — die Gültigkeitsbereiche der diversen Variablen i, die durch das abgedruckte Programm festgelegt sind. b) Was wird durch das Programm ausgegeben? ... PROCEDURE Q(i: INTEGER); BEGIN P(3*i) END Q; PROCEDURE Start*; BEGIN i := 2; P(i); Q(2*i); Out.Ln END Start; BEGIN END KlausurAufgabe. Aufgabe 7 MODULE K; IMPORT In, Out; VAR N, n: INTEGER; PROCEDURE P*; BEGIN In.Open; In.Int(N) END P; PROCEDURE Q*; BEGIN Out.Ln END Q; PROCEDURE R*; VAR i: INTEGER; BEGIN FOR i := N TO N + n -1 DO Out.Char(CHR(i)) END END R; PROCEDURE S*; BEGIN In.Open; In.Int(n) END S; BEGIN END K. (Punktzahl: 5/24) Gegeben sei der folgende Text: ABCDEFGHIJ KLMNOPQRST UVWXYZ Geben Sie unter ausschließlicher Verwendung von Prozeduren aus dem nebenstehenden Modul K eine Folge von Kommandos an — eventuell mit Parameter, falls erforderlich —, welche diesen Text erzeugt. Die Folge soll so kurz wie möglich sein. Hinweis: Der Großbuchstabe A hat den dezimalen ASCII-Code 65.