1. Test (Demo)

Der Test umfasst mehrere Aufgaben, diese bestehen aus jeweils einer oder mehreren Teilfragen, bei Single- und Multiple-Choice-Fragen wählen Sie die richtigen Lösungen aus, Textfragen beantworten Sie direkt in dem zur Frage gehörenden Textfeld.

  • Lesen Sie die Aufgaben sorgfältig durch.
  • Wenn unterhalb einer Aufgabe oder Teilaufgabe Auswahlfelder vorgegeben sind, wählen Sie korrekte Lösungen durch Anklicken der entsprechenden Kreise. Textfelder unterhalb der Lösungsmöglichkeiten können Sie bei Bedarf für Anmerkungen verwen
  • Steht unterhalb einer Aufgabe oder Teilaufgabe ein Textfeld ohne Auswahlfelder, schreiben Sie die Lösung bitte direkt in das Textfeld.
  • Speichern Sie Ihre Lösungen regelmäßig. Auch nach dem Speichern sind alle Lösungen noch änder
  • Haben Sie Schwierigkeiten bei einer Aufgabe, versuchen Sie andere Aufgaben zuerst zu lösen. Wenden Sie sich zuletzt nocheinmal der ungelösten Aufgabe zu.
  • Haben Sie Verständnisprobleme, wenden Sie sich bitte an die Testaufsicht
  • Wenn Sie denken, dass eine Multiple-Choice-Aufgabe nicht eindeutig formuliert ist, so begründen Sie Ihre Antwort in der Textbox Ansonsten soll diese Box leer sein. Steht dort etwas Falsches, so kann das auch zum Abzug von Punkten führen.

Im echten Test werden Sie die Textfelder unterhalb der Auswahlfelder (mit vorgegebenen Antwortmöglichkeiten) nur in Ausnahmefällen brauchen um uns etwas mitzuteilen, etwa weil die Auswahlmöglichkeiten nicht reichen. Im Übungstest sollen Sie hingegen die Textfelder benutzen um Ihre Entscheidungen zu begründen. Das dient vor allem Übungszwecken. Achtung! Bei dem Test werden Sie keinen Java-Compiler zur Verfügung haben. Führen Sie daher das letzte Beispiel händisch (oder im Kopf) durch.

1. Aufgabe: Lambda-Kalkül

(6 Punkte)

  • Sind die folgenden Ausdrücke in Normalform? Wenn ein Ausdruck nicht in Normalform ist aber eine Normalform hat, geben Sie diese bitte im Textfeld an.
    - Ja Nein
    λu.u
    λu.(u u)
    λf·(λx·f (x x)) (λx·f (x x))
    (λu.a) a
    (3 Teilpunkte)
  • Sind die folgenden Ausdrücke Normalformen des Ausdrucks (λu.(u a)) (λv.b)?
    - Ja Nein
    λv
    a
    λu.u
    b
    (3 Teilpunkte)

2. Aufgabe: Grammatik

(7 Punkte)

In den folgenden Grammatiken stehen akzeptierte Zeichen (Terminalsymbole) in Hochkommata. Sollte eine aufeinanderfolgende Gruppe von Zeichen akzeptiert werden, so verwenden wir folgende Schreibweise:

'a'..'z' = Alle Zeichen von a bis z
'A'..'Z' = Alle Zeichen von A bis Z
'0'..'9' = Alle Ziffern von 0 bis 9

Ignorieren Sie White-Space (Abstände).

  • Gegeben ist die folgende Grammatik in EBNF-Notation
    Expr = { '-' } Value [ ( '+' | '-' ) Expr ]
    
    Value = '(' Expr ')'
          | '0'..'9'
    
    Entsprechen die folgenden Ausdrücke der Grammatik als Expr? Geben Sie im Textfeld die Produktionsregeln an oder begründen Sie warum der Ausdruck nicht der Grammatik entspricht.
    Nein Ja -
    1 + 2 + 3 - 4
    --0
    ((- 1 + 1))
    ((1)
    ((0))
    ((1 + 1 - ))
    00
    -1 - -2
    (1 - 2) + (3 - 4)
    -2 + 4 + 6
    (-(0))
    (())
    1 + 2 - 3
    1 - (2 - 3) - 4
    1 + --2
    (4 Teilpunkte)
  • Akzeptieren die folgenden Grammatiken den Ausdruck abcd als S? Geben Sie die Produktionsregeln an oder argumentieren Sie warum nicht.
    - Nein Ja
    S = { 'a' } A
    
    A = 'c' A 'b'
      | { 'd' }
    
    S = A { 'a' }
    
    A = 'b' A 'c'
      | { 'd' }
    
    S = { 'a' } A { 'a' }
    
    A = ['b'] {'d'} 'c'
    
    (3 Teilpunkte)

3. Aufgabe: Theorie

(2 Punkte)

  • Aus welchen Teilen setzt sich die Von Neumann-Architektur zusammen? Wie sind diese Teile untereinander verbunden?
    (2 Teilpunkte)

4. Aufgabe: Theorie

(2 Punkte)

  • Welche Programmierparadigmen haben wir unterschieden? Wodurch zeichnen sie sich jeweils aus?
    (2 Teilpunkte)

5. Aufgabe: Theorie

(2 Punkte)

  • Was versteht man unter der Lebensdauer, dem Gültigkeitsbereich und dem Sichtbarkeitsbereich einer Variablen? Geben Sie im Textfeld an, was an der Aussage falsch ist, falls die Antwortmöglichkeit nicht stimmt. Das kann z.B. ein Gegenbeispiel sein.
    - Richtig Falsch
    Lebensdauer ist der Zeitraum von Allokieren des Speichers bis zur Freigabe
    Lebensdauer in Java ist der Zeitraum von Allokieren mit new bis zum Ende des Blockes
    Lokale Variablen sind nur während ihrer Lebensdauer zugreifbar
    Variablen in Java sind im gesamten Programm gültig
    In Java entspricht der Gültigkeitsbereich dem Sichtbarkeitsbereich
    (2 Teilpunkte)

6. Aufgabe: Programm nachvollziehen

(6 Punkte)

Gegeben ist die folgende Klasse:

public class Recursive {
    private static int count = 0;
    
    public static int rec(int n) {
        count ++;
        
        if(n > 1) {
            int a = rec(n - 1);
            System.out.println(count + ": a = " + a);
            int b = rec(n - 1);
            System.out.println(count + ": b = " + b);
            
            return a + b;
        } else {
            return n;
        }
    }
    
    public static void main(String[] args) {
        System.out.println("Ergebnis = " + rec(4));
    }
}

Die ersten zwei Zeilen, die vom Programm ausgegeben werden, lauten:

4: a = 1
5: b = 1
  • Welche der weiteren Zeilen sind korrekt?
    Falsch Richtig -
    8: b = 2
    15: b = 2
    15: a = 1
    12: b = 1
    12: a = 2
    15: b = 4
    14: a = 1
    5: a = 2
    Ergebnis = 10
    Ergebnis = 8
    8: a = 4
    7: a = 1
    8: a = 5
    8: b = 1
    15: b = 1
    6: a = 2
    11: a = 1
    Ergebnis = 9
    (6 Teilpunkte)