Informatik-Treff: Abiturklausur (1997 LK 2. Klausur) 


Abituraufgabe für den Leistungskurs Informatik 

Aufgabe 1: Aspekte des Compilerbaus, Verwaltung von Syntaxbäumen, Interpretieren von Syntaxbäumen

Im Unterricht wurden algebraische Terme (Infix-Schreibweise) auf syntaktische Korrektheit überprüft und in Postfix-Zwischencode übersetzt. Die Terrne werden im folgenden auf Zeichenketten (string) gespeichert. Die Operatoren sind + , - , * , / , die Operanden seien einziffrige Zahlen. Infix- und Postfixdarstellungen werden durch ";" abgeschlossen.

a) Übersetze folgende Terme "per Hand" in Postfix-Codierung:

b) Übersetze rückwärts in Infix-Notation. Achte auf richtige Klammerung:

c) Gegeben ist nun ein Postfix-Zwischencode. Mit Hilfe eines Kellers, in dem Teilbäume ( = Zeiger auf deren Wurzeln) verwaltet werden, soll der zugehörige Syntax-Baum erzeugt werden. Zeichne den Syntaxbaum "per Hand", der zu 3 6 4 5 * - - 5 + ; gehört.
 

Typendeklaration eines Baums:
type baum = ^knoten;
     knoten = record
                info: char;
                links, rechts: baum
              end;
var b,c: baum; 

Typendeklaration eines Kellers, in dem Bäume (= Zeiger auf deren Wurzeln) verwaltet werden:

type keller = ^kelem;
     kelem = record
               inhalt: baum;
               next: keller
             end;
var k: keller;

d) Gib eine Folge von Pascal-Befehlen an, die folgenden Baum B erzeugt:

baum1.gif

e) Erläutere, wie man mit oben stehendem Keller einen Postfix-Zwischencode in einen Syntaxbaurn umwandeln kann. Hinweis:

Alter Keller:

keller1.gif

Aktuelles Zeichen: - (minus)

Neuer Keller:

keller2.gif

f) Schreibe eine function baumbau (a:s tring): baum , die zu einer Zeichenkette a (mit dem postfix-Zwischencode eines Funktionsterms) den zugehörigen Baum liefert.

g) Schreibe eine rekursive Pascal-Funktionsprozedur evaluate (b: baum): real , die einem Syntaxbaum die Zahl zuordnet, die bei seiner Auswertung herauskommt (im obigen Beispiel 2 * 4 - ( 1 + 3 ) = 4 ) . Achtung, dabei sind die Zeichen 0 ... 9 in Zahlen zu verwandeln.

h) Wir betrachten nun die Postfix-Terme als formale Sprache. Sie wird z.B. erzeugt durch:

Welchen Typ hat die oben stehende Grammatik? Zeichne den Ableitungsbaum für den Termn 3 6 4 5 * - - 5 + ; . Warum ist diese Grammatik für den Bau eines Parsers ungeeignet?
 

Aufgabe 2: Anwendung von Automaten zur Robotersteuerung

Ein Wagen mit zwei Photowiderständen als "Augen" soll in der Ebene hinter einer frei beweglichen Lampe herfahren und stehen bleiben, wenn er der Lampe zu nahe kommt. Entfernt sich die Lampe wieder, setzt der Wagen seine Suchfahrt fort. Die Widerstände l und r (vorne links und rechts am Wagen) können über die "function resistance (seite: char): integer" abgefragt werden. Beispiel  x : = resistance('1') . Die Ergebnisse liegen zwischen 1 und 100. Die Lampe befindet sich auf der Seite des Wagens, die den kleineren Widerstand liefert, also stärker beleuchtet wird.
 

robot1.gif

a) Schreibe eine function signal: integer, die die beiden Widerstandswerte über resistance( ) abfragt und folgende Ausgabe erzeugt:

b) Deute die Signalfolge 00 ... 022 ... 233 ... 322 ... 200. Was könnte mit Lampe und Wagen geschehen sein? Gib zwei Signalfolgen an, die bei vernünftiger (und langsamer) Bewegung von Lampe und Wagen nicht auftreten können. Kommentiere.

c) Konstruiere das Netz eines Automaten, das alle Signalfolgen akzeptiert, die im Zusammenhang mit unserem Problem auftreten können. Du kannst auf einen gesonderten Fehlerzustand aus Gründen der Übersichtlichkeit verzichten. Die Zustände sollen durch ganze Zahlen bezeichnet werden.

d) Die Prozedur, die den Wagen steuert, könnte wie folgt aussehen:

procedure wagensteuerung;
var state, signal: integer;
begin
  state := 0;
  repeat
    state := uebergang(state,signal)
    move_a_little(state)
  until keypressed
end;

Schreibe die function uebergang (state,signal: integer): integer , die sich aus Deiner Lösung von c) ergibt. Wie würde sich procedure move_a_little(signal) gestalten, wenn man die Vorderräder der Wagen mit zwei Schrittmotoren und der procedure stepmotor(seite: char) unabhängig voneinander steuern können?

Bsp.: stepmotor('1') bewegt das linke Rad ein wenig nach vorne.

e) In das Steuerprogramm des Wagens soll ein Zähler eingebaut werden, der zählt, wie oft das Muster 11 ... 122 ... 233 ... 3 vor den "Augen" des Wagens abgelaufen ist (das Licht also von links nach rechts gewandert ist). Entwirf das Netz eines weiteren Automaten, der in der Folge der durch SIGNAL gelieferten Eingabezeichenfolge nach diesem Muster sucht. (Kein Programm verlangt).
 

Aufgabe 3: Technische Informatik - Schaltwerke

a) In Turbo-Pascal kann der Datentyp Shortint nur Werte zwischen -128 und +127 annehmen. Erläutere, warum das so ist und erkläre

an den Beispielen a = 39, b = 27 .

b) Die Skizze stellt eine 4-Bit-Schieberegister dar, aufgebaut aus JK-Flipflops. Gib die Schaltwerttabelle eines JK-Flipflops an und erläutere damit die Funktionsweise des Schieberegisters.
 

schieb1.gif

c) Gib die Schalttabelle und die disjunktive Normalforrn für die Schaltterme eines Volladdierers an.

d) Minimiere die Schaltterme des Volladdierers sowohl mit Hilfe der Gesetze der booleschen Algebra als auch mittels Karnaugh-Diagrammen.

e) Zeichne das Schaltnetz eines Volladdierers.

f) Erläutere, wie sich die Schaltungen ausschließlich aus NOR-Gattem aufbauen lassen.

g) Entwickle aus Schieberegistern und anderen Bauteilen ein serielles Addierwerk für 4-Bit-Dualzahlen.