Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » aud » Forendiskussionen
Inhaltsverzeichnis
Forendiskussionen
- TODO: Noch keiner. Falls welche angelegt, hier eintragen! :)
Lösungsversuch
Aufgabe 1 - Wissensfragen
a) 1 und 4
b) 2 und 4
c) 2 und 3
Aufgabe 2 - Rekursion
static List<List<Long>> potenzmenge(long n) { List<List<Long>> pm = new ArrayList<>(); if (n <= 0) { // Basisfall pm.add(new ArrayList<Long>()); } else { // Rekursion List<List<Long>> rek = potenzmenge(n - 1); // Ergebnisse zusammenfuehren for (List<Long> ohneN : rek) { List<Long> mitN = new ArrayList<>(ohneN); // *noch* ohne n mitN.add(n); pm.add(mitN); pm.add(ohneN); } } return pm; }
Aufgabe 3 - ADT
isBlack(new, x, y) = false isBlack(flip(cv, x1, y1), x2, y2) = !isBlack(cv, x2, y2) falls x1=x2 && y1=y2 isBlack(cv, x2, y2) sonst bottom(new) = 0 bottom(flip(cv, x1, y1)) = y1 falls y1 < bottom(cv) && !isBlack(cv, x1, y1) bottom(cv) sonst
Aufgabe 4 - Dynamische Programmierung
private long pLR(int n, long[] ps) { ps[1] = 2; if (n >= 2) { ps[n] = pLR(n - 1, ps); int i = 0; do { ps[n]++; for (i = 1; i < n && ps[n] % ps[i] != 0; i++) { } } while (i != n); // kleineren Teiler gefunden? } return ps[n]; }
Aufgabe 5 - Streuspeicherung
Diese Aufgabe entspricht 1:1 Aufgabe 4 aus der Klausur WS14/15.
Nein, nicht ganz. Hier muss im Gegensatz zur großen Klausur nicht das alte Objekt zurückgegeben werden, falls man auf dieses an der zu besetzenden Stelle trifft. Das erkennt man auch daran, dass in der Miniklausur der return-type „void“ verwendet wurde.
class HashSet<K> { K[][] map; int s, b, c; HashSet(int s, int b, int c) { assert 0 < c && c < s; this.s = s; //size of map this.b = b; //bucket size this.c = c; //collision increment map = (K[][]) new Object[s][b]; } K put(K k, int hk) { assert k != null && 0 <= hk && hk < s; int pos = hk; //current position during exploration do { for(int i = 0; i < b; i++) { //Für jede Stelle b des Buckets if(map[pos][i] == null) { map[pos|[i] = k; return; } pos += c; pos %= s; //hiermit wird sichergestellt, dass pos nicht Groesser als s wird und in diesem Fall wieder von vorne beginnt, aber Schrittlänge c beibehaelt } while (pos != hk); //pos wird im do-Block geaendert, wenn es also wieder gleich hk werden wuerde, liegt ein Zyklus vor throw new IllegalArgumentException(); } }