24.02.2011

Klausur

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

24.02.2011
Hi Leute,

ich hab eine Frage zu der Aufgabe 7 (wp Kalkül).
Aufgabenteil d)
Sowie ich mir gedacht habe, müsste die Lösung: V = n - i sein
Aber von einer Freundin habe ich gerade erfahren, dass im letzten Semester folgende Lösung im Vorbereitungskurs bei rauskam:

V = s+ = a[ i ] für a[ i ] > 0
s- = a[ i ] für a[ i ] < 0

Kann mir jemand das vielleicht erklären? Danke.


Ohne polemisch klingen zu wollen:
IMHO kann das höchstens diese Freundin… was da steht entspricht syntaktisch keinem mir bekannten Kalkül (und macht daher auch als Schleifenvariante keinerlei Sinn).

[Bist du ein fake?]


Als „oberster Übungsleiter“ ist es nicht deine Aufgabe, deinen Ersties vorzuwerfen, fakes zu sein, wenn sie was nicht verstehen. Wenn du ein bisschen mehr Forum lesen würdest, wüsstest du, dass gaku echt ist. Und das wp-Kalkül liegt nunmal nicht jedem.


Klingt gut.

Hm, das ist eigentlich nur die Berechnung, die in der Schleife gemacht wird, die hat zumindest in diesem Fall nichts mit der Schleifenvariante zu tun. Der einzige Schleifencode, der in diesem Fall wichtig für die Variante ist, ist das i++, weil das die einzige Stelle ist, an der der Wert n−i sich ändert.
Hilfreich ist es vielleicht, sich die Schleife wie folgt umzuschreiben: int i = 0; while (i < n) { if (a[i] > 0) { s += a[i]; } else { s -= a[i]; } i++; } Und dann kann man sich den Code Schritt für Schritt anschauen, wo n oder i und damit auch n−i verändert wird.
Würde z.B. das n irgendwo mitten in der Schleife verändert (z.B. am Anfang noch ein n -= a[i] oder sowas), dann müsste man auch diese Änderung betrachten und sich fragen, wie sich die Variante ändert. Aber solchen Code hat man doch eher selten (zumindest in AuD-Klausuren).

tl;dr:
n−i ist richtig, es wird selten kompliziertere Varianten geben.


Trotz Trollerei von FSI Informatik Forum
Bitte verwendet solche Schreibweisen/Transskriptionen nicht im Rahmen einer WP-Aufgabe - und schon gar nicht in der Klausur…:


Wie würde denn eine Antwort aussehen, die bei der d) volle Punkte bekommen würde? Reicht “V = n - i”? Oder sollen wir noch etwas begründen und mit strenger Monotonie etc argumentieren?


Danke für die Erklärungen.
Die falsche Lösung stammte aus dem Klausurvorbereitungskurs aus dem WS 2011.

Was das mit dem “Bist du ein fake?” sein soll, weiß ich nicht. Deshalb werde ich es einfach mal ignorieren.

@Hasenichts
Kann dir zwar keine genaue Antwort geben, aber besser ist, wenn du einfach noch zwei Sätze dazu schreibst:

  1. Monotonfalled, da i steigt
  2. Nicht negativ, da i immer < n ist
    Denke ich!

„Geben Sie eine Variante an“ heißt: Schreib eine hin. Fertig. Steht ja nicht da „begründen Sie, dass es eine ist“ oder „bestimmen Sie eine Variante“.


Gleiche Klausur, Aufgabe 8:
Im Wiki wurde in der Auswertung des UML-Klassendiagramms für die Methode gibAnzahlMitarbeiter() und das Attribut gebJahr der Datentyp int benutzt, nicht die Klasse Integer.

Meiner Meinung nach war das falsch, deshalb hab ich’s geändert. Oder seht ihr das anders?


Jo, hätte ich auch so gemacht. Steht ja sonst auch immer int dabei.


Sofern ich mich nicht irre, stand irgendwo, Integer → int, sowie noch eine weiter Umwandlung, jene mir soeben entfallen ist.
Sprich deine Änderung wäre falsch.
Ob diese zu Punktabzug führen würde waage ich allerdings zu bezweifeln.

Edit: tippos


ich hätte noch eine frage zur aufgabe 1d): die antworten sollen ja wahrscheinlich O(log n) und O(n log n) sein, aber meiner meinung nach würde die funktion f nie terminieren, weil die schleife nicht bei k=1, sondern bei k=0 anfängt.

meine frage ist jetzt erstens, ob ich richtig liege oder irgendetwas übersehen habe, und zweitens, was genau man in so einem moment in der klausur machen sollte… die aufgabe korrigieren?^^ an den rand schreiben?


hi zusummen! Hat jemand einen Lösungsvorschlag zu Aufgabe 2e?


Ich habe mal in meine Unterlagen nachgeschaut und ja, deine Antworten wären theoretisch richtig. Und ja, das war ein Schreibfehler, dass k = 0 ist. Sollte sicherlich mit k = 1 sein, da es sonst keinen Sinn macht.
In der Klausur würde ich einen Aufpasser fragen. Falls es wirklich ein Fehler sein sollte, wird das irgendwie korrigiert (an die Tafel geschrieben o.ä.).


Ja, jetzt schon ^^

	public static boolean allReach(boolean[][] ug, int node){
		boolean schonGehabt[] = new boolean[ug[node].length];
		
		help(ug, node, schonGehabt);
		
		for (int i=0; i<schonGehabt.length; i++){
			if (schonGehabt[i] == false){
				return false;
			}
		}
		return true;
	}
	
	
	public static void help(boolean[][] ug, int node, boolean[] schonGehabt){
		schonGehabt[node] = true;
		
		for (int i=0; i<ug[node].length; i++){
			if (schonGehabt[i] == false && ug[node][i] == true){
				help(ug, i, schonGehabt);
			}
		}
	}

EDIT:
Hab den Code mal als Lösung auf der Homepage gepostet. Hoffe es ist kein Fehler drin.

EDIT2:
Fehler korrgiert.

1 „Gefällt mir“

Danke dir für die Hilfe :slight_smile:

ich dachte, dass mithilfe count man Knoten rechnet, die man erreichen kann und dann müsste es so sein, dass:

		if (count == ug[node].length){
			return true;
		}

Könntest du bitte erklären, was du in diesen Code-Fragment gemacht hast?


Hmm, wenn ich jetzt so drüber nachdenke, ist das falsch. Vergiss es. Ich ändere gleich mal meinen Post.
Der restliche Code dürfte aber stimmen.

Danke für die Frage.


Hallo :slight_smile:

hab die Aufgabe auch mal probiert :smiley:

public static boolean allReachable(boolean [][] ug, int node){
	
	List<Integer> visited = new ArrayList<Integer>();
				
	allReachableHelper(ug, node, visited);

	return ((visited.size() == ug.length));
    }
 
    private static void allReachableHelper(boolean [][] ug, int node,
	    List<Integer> visited){
	
	visited.add(node);
	
	for(int i = 0; i<ug.length; i++){
	    if(ug[node][i] == true && node!=i && visited.contains(i) == false){
		allReachableHelper( ug, i, visited);
	    }
	}
    }
1 „Gefällt mir“

gaku, Ina89, danke euch! :slight_smile: