Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » aud » Forendiskussionen (Übersicht)
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige ÜberarbeitungLetzte ÜberarbeitungBeide Seiten, nächste Überarbeitung | ||
pruefungen:bachelor:aud:loesungws08 [16.02.2013 08:43] – Dawodo | pruefungen:bachelor:aud:loesungws08 [11.05.2019 10:23] – SpeedyGonzalez | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ==forum== | + | ===== Forendiskussionen ===== |
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
Zeile 7: | Zeile 7: | ||
* [[https:// | * [[https:// | ||
- | ====Lösungsversuch==== | + | ===== Lösungsversuch |
- | ==Aufgabe 1 - Wissensfragen== | + | ==== Aufgabe 1 - Wissensfragen |
**a)** Falsch, es muss sortiert sein | **a)** Falsch, es muss sortiert sein | ||
- | **b)** 3 - eine Schleife korrekt ist | + | **b)** |
**c)** Richtig | **c)** Richtig | ||
Zeile 28: | Zeile 28: | ||
**i)** 1 - kontextsensitiven Grammatiken | **i)** 1 - kontextsensitiven Grammatiken | ||
- | ==Aufgabe 2 - Graphen== | + | ==== Aufgabe 2 - Graphen ==== |
**a)** | **a)** | ||
^ A ^ B ^ C ^ D ^ E ^ F ^ Prioritäts-Warteschlange^ | ^ A ^ B ^ C ^ D ^ E ^ F ^ Prioritäts-Warteschlange^ | ||
Zeile 49: | Zeile 50: | ||
^ F | 10 | A -> B -> E -> F | | ^ F | 10 | A -> B -> E -> F | | ||
- | ==Aufgabe 3 - Java== | + | ==== Aufgabe 3 - Java ==== |
**a)** | **a)** | ||
Zeile 75: | Zeile 76: | ||
{{: | {{: | ||
- | ==Aufgabe 4 - ADT== | + | ==== Aufgabe 4 - ADT ==== |
**a)** | **a)** | ||
- | | + | < |
- | contains(x, append(x, L)) = 1 + contains(x, L) | + | contains(x, create) = false |
- | contains(x, append(y, L)) = contains(x, L) | + | contains(x, append(x, L)) = true |
+ | contains(x, append(y, L)) = contains(x, L) | ||
+ | </ | ||
**b)** | **b)** | ||
- | A -> D -> create | + | A -> D |
**c)** | **c)** | ||
+ | < | ||
+ | append(head(append(D, | ||
+ | A1 | ||
+ | = append(head(prepend(D, | ||
+ | A1 | ||
+ | = append(head(prepend(D, | ||
+ | A3 | ||
+ | = append(D, prepend(A, create)) = | ||
+ | A2 | ||
+ | = prepend(A, append(D, create)) = | ||
+ | A1 | ||
+ | = prepend(A, prepend(D, create)) | ||
+ | </ | ||
- | append(head(append(D, | + | ==== Aufgabe 5 - Pseudo-Zufallszahlen |
- | A1 | + | |
- | | + | |
- | A1 | + | |
- | = append(head(prepend(D, | + | |
- | A3 | + | |
- | = append(D, prepend(A, create)) = | + | |
- | A2 | + | |
- | = prepend(A, append(D, create)) = | + | |
- | A1 | + | |
- | = prepend(A, prepend(D, create)) | + | |
- | + | ||
- | + | ||
- | ==Aufgabe 5 - Pseudo-Zufallszahlen== | + | |
**a)** | **a)** | ||
<code java> | <code java> | ||
Zeile 114: | Zeile 117: | ||
**Vorüberlegungen: | **Vorüberlegungen: | ||
- | f(n - 1) ^= c, da f(2) = 2 + 1 = 3 ist; analog:\\ | + | <code java> |
- | f(n - 2) ^= b\\ | + | public static int f(int n) { |
- | f(n - 3) ^= a | + | return lin(1, 2, 3, n); |
+ | } | ||
+ | private static int lin(int a, int b, int c, int steps) { ... | ||
+ | </ | ||
+ | |||
+ | Die Basisfälle der Funktion sind für n < 3 gegeben: \\ | ||
+ | f(0) = 1 \\ | ||
+ | f(1) = 2 \\ | ||
+ | f(2) = 3 \\ | ||
+ | |||
+ | Aus dem gegebenen Aufruf (mit 1,2,3) und dieser Basisfälle lässt sich schließen: \\ | ||
+ | a = 1 = f(0) --> | ||
+ | b = 2 = f(1) --> | ||
+ | c = 3 = f(2) --> | ||
+ | |||
+ | Das Wichtige an dieser Aufgabe ist sich bewusst zu machen, wie die Werte im angegebenem Aufruf, mit den Basisfällen bzw. f(n-3), f(n-2), f(n-1) in der angegebenen Formel korrespondieren. Das Ziel ist ja diese Werte der Formel in Java-Code auszudrücken. | ||
- | lin (a, b, c) ^= lin (f(n - 3), f(n - 2), f(n - 1), steps) | + | Somit wissen wir: \\ |
+ | lin(a, b, c, steps) -> lin(f(n - 3), f(n - 2), f(n - 1), steps) | ||
- | Wir starten also am Basisfall n < 3 ( => Bottom-Up ), weshalb nur noch der " | + | Wir starten also am Basisfall n < 3 (=> Bottom-Up), weshalb nur noch der " |
**Nächster " | **Nächster " | ||
- | lin (f(n - 2), f(n - 1), f(n), steps - 1) **(*)** | + | lin(f(n - 2), f(n - 1), f(n), steps - 1) **(*)** |
- | f(n - 2) und f(n - 1) sind bereits berechnet und müssen nur nach links geschoben werden. f(n) berechnet sich wie in Aufgabe a) und sieht mit a, b, c dann so aus: | + | f(n - 2) und f(n - 1) sind bereits berechnet und müssen nur nach links geschoben werden.\\ |
+ | f(n) berechnet sich wie in Aufgabe a), dieses mal jedoch | ||
- | f(n) = 1 + (((c - b) * a) % 100) | + | f(n) = 1 + (((c - b) * a) % 100) **(* *)** |
- | Das in **(*)** eingesetzt ergibt | + | **(* *)** in **(*)** eingesetzt ergibt: |
lin(b, c, 1 + (((c - b) * a) % 100), steps - 1) | lin(b, c, 1 + (((c - b) * a) % 100), steps - 1) | ||
Zeile 140: | Zeile 160: | ||
private static int lin(int a, int b, int c, int steps) { | private static int lin(int a, int b, int c, int steps) { | ||
- | | + | if (steps == 0) |
- | return a; | + | return a; |
- | } else { | + | |
- | lin(b, c, 1 + (((c - b) * a) % 100), steps - 1); | + | return |
- | } | + | |
} | } | ||
</ | </ | ||
Zeile 150: | Zeile 169: | ||
**Warum steht das Ergebnis gerade in a?** | **Warum steht das Ergebnis gerade in a?** | ||
- | Wo das Ergebnis stehen muss, zeigt die Anwedung der Rekursionsvorschrift: | + | Wo das Ergebnis stehen muss, zeigt die Anwedung der Rekursionsvorschrift: |
+ | f(0) = 1 \\ | ||
+ | f(0) = lin(1, 2, 3, 0) \\ | ||
+ | Das Ergebnis steht in Variable | ||
**c)** | **c)** | ||
<code java> | <code java> | ||
public static int f(int n) { | public static int f(int n) { | ||
- | int a = 1, b = 2, c = 3; | + | int a = 1; |
- | while (n > 0) { | + | int b = 2; |
- | int tmp = a; | + | int c = 3; |
+ | |||
+ | while(n > 0) { | ||
+ | int fn = 1 + (((c - b) * a) % 100); | ||
a = b; | a = b; | ||
b = c; | b = c; | ||
- | c = 1 + (((b-a)*tmp)%100); | + | c = fn; |
n--; | n--; | ||
} | } | ||
+ | |||
return a; | return a; | ||
} | } | ||
</ | </ | ||
- | ==Aufgabe 6 - Suchbäume== | + | |
+ | |||
+ | ==== Aufgabe 6 - Suchbäume ==== | ||
**a)** | **a)** | ||
< | < | ||
Zeile 172: | Zeile 202: | ||
/ \ | / \ | ||
23 42 | 23 42 | ||
- | / | + | / |
7 | 7 | ||
- | | + | \ |
81 | 81 | ||
</ | </ | ||
Zeile 189: | Zeile 219: | ||
**c)** | **c)** | ||
+ | |||
+ | Verwendete Definitionen: | ||
+ | * Höhe eines Blatts: 0 | ||
+ | * Daraus folgt die Höhe des leeren Baums: -1 | ||
+ | * Balancefaktor: | ||
{{: | {{: | ||
Zeile 196: | Zeile 231: | ||
{{: | {{: | ||
- | * Rotation an: 64 | + | * Rotation an Knoten: 64 |
- | * **Einfachrotation**, | + | * **Einfachrotation** |
**e)** | **e)** | ||
- | ... | ||
- | ==Aufgabe 7 - Heap== | + | {{: |
+ | |||
+ | ==== Aufgabe 7 - Heap ==== | ||
**a)** | **a)** | ||
- | Der Wert jedes Knotens muss größer, als der seiner Kinder sein. | + | Der Wert jedes Knotens muss größer |
**b)** | **b)** | ||
Zeile 226: | Zeile 262: | ||
<code java> | <code java> | ||
public int parentIndex (int childIndex) { | public int parentIndex (int childIndex) { | ||
- | return (childIndex - 1) / 2; | + | return |
} | } | ||
</ | </ | ||
Zeile 253: | Zeile 289: | ||
- | ==Aufgabe 8 (wp)== | + | ==== Aufgabe 8 - wp-Kalkül ==== |
**a)** | **a)** |