![]()
Member since Aug 2013
85 posts
|
![]()
Subject: Lösungsversuch Miniklausur
Hallo zusammen!
Ich habe mir gedacht, dass es (zwecks Klasurvorbereitung o. Ä.) ganz hilfreich wäre, eine Lösung für die Miniklausur zusammenzustellen, da der LS 2 (meines Wissens) keine Lösung herausgegeben hat. Ich poste hier mal meinen (teilweisen) Lösungsversuch (keine Garantie auf Korrektheit!). Wer ihr Korrekturen habt oder Lösungen für die anderen Aufgaben, stellt sie einfach hier rein! 1) (MC) a) falsch: nur bei assert(x < 4711) wären die Codefragmente äquivalent b) Option 2 und 3 sind richtig c) O(n) d) richtig e) richtig 2a) (magisches Quadrat) boolean isSolved(int[][] sq){ int n = sq.length; int checkSum = ((n * n * n) + n) / 2; int rowSum = 0, colSum = 0, diag1Sum = 0, diag2Sum = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ rowSum += sq[i][j]; colSum += sq[j][i]; } if(rowSum != checkSum || colSum != checkSum){ return false; } else { rowSum = colSum = 0; } } for(int i = 0; i < n; i++){ diag1Sum += sq[i][i]; diag2Sum += sq[n - 1 - i][i]; } if(diag1Sum != checkSum || diag2Sum != checkSum){ return false; } return true; } 3) ADTs a) head.next = head; b) 13 zwischen den Elementen 11 und 17 einfügen. Die next-Referenz von 11 zeigt dann auf 13, und next von 13 verweist auf 17. c) -2 zwischen dem head-Element und 7 einfügen. Die next-Referenz des Sentinel-Elements zeigt dann auf -2, und next von -2 verweist auf 7. 4) ADTs ops create: T --> AA get: int x AA --> T set: int x T x AA --> AA delete: int x AA --> AA size: AA --> int axs get(x,create) = null get(x, set(y, e, aa)) = e, wenn x = y; sonst: get(x, aa) delete(x, create) = create delete(x, set(y, e, aa)) = aa, wenn x = y; sonst: set(y, e, delete(x, aa)) size(create) = 0 size(x, set(x, e, aa) = size(aa), wenn get(x, aa) = null; sonst: 1 + size(aa) |
Chayyam
(Former member)
|
![]()
3. a) head.next = head; unter keinen Umständen den Konstruktor von Entry aufrufen!
edit: Bei 2a darf checkSum nicht auf 0 gesetzt werden. edit2: dachte eig. schon, aber nein. |
![]() |
![]()
Member since Mar 2012
216 posts
|
![]()
In reply to post #1
Nope, hier bin ich etwas anderer Meinung, denn die beiden Zeilen koennen IMHO nie äquivalent sein, da fuer Assertions immer das entsprechende Flag beim Programmstart uebergeben werden muss, wohingegen das manuelle Schmeißen der Exception immer passieren kann. |
carpe diem, baby!
|
![]()
Member since Aug 2013
85 posts
|
![]()
In reply to post #2
Es gab eine 1f)?
Danke, ich hab es gefixt. (hatte colSum mit CheckSum verwechselt). |
Member since Nov 2013
33 posts
|
![]()
In reply to post #3
Der Sinn von Assertions ist ja schließlich dass man sie abschalten kann, richtig? |
Member since May 2013
220 posts
|
![]()
+1 br0gr4mm3r
Ja. Es geht ja auch nicht um den Sinn von Assertions, sondern darum, ob sich die beiden Codefragmente immer gleich verhalten. Und da man Assertions eben an- und abschalten kann, tun sie das nicht. |
Member since Oct 2013
84 posts
|
![]()
Subject: 2b)
3d) O(n) (schlimmster Fall ist die komplette Liste durchlaufen)
Ich trag hier mal meine 2b) nach, für die Musterlösung: if(pos > used.length){
return isSolved(sq); } else { for(int i = 1; i <= used.length; i++){ if(used[i-1] == false){ sq[col][row] = i; used[i-1] = true; if(solve(sq, pos+1, used)){ return true; } sq[col][row] = 0; used[i-1] = false; } } } return false; |
Member since Nov 2006
347 posts
|
![]()
![]()
![]() |
/* This is O(scary), but seems quick enough in practice. */
|
Member since Oct 2013
84 posts
|
![]()
Schlecht abgetippt. In der Klausur stehen bei mir , ![]() Und ja klar, ich hätte jetzt auch "== false" schreiben können...aber ich dacht mir so: Nea. ärgern wir ict ein wenig :P (Habe meinen Beitrag korrigiert. Fehler sind nicht gestattet!) |
Member since Nov 2006
347 posts
|
![]()
Wenn du jetzt noch ein
![]() |
/* This is O(scary), but seems quick enough in practice. */
|
Member since Oct 2012
555 posts
|
![]()
(Sorry, habe heute von GCC generierten x86-Assembler gesehen.) |
Member since Oct 2013
84 posts
|
![]()
In reply to post #10
Akzeptiert und abgemacht. Ich hoffe, ich konnte dir den Abend etwas versüßen ![]() |
Member since Nov 2006
347 posts
|
![]()
In reply to post #11
Interessant ![]() |
/* This is O(scary), but seems quick enough in practice. */
|
Member since Oct 2012
555 posts
|
![]()
Nimm den Post nicht so ernst, er ist nur davon inspiriert, wie GCC (und andere Compiler) Register auf x86 nullen: xor eax, eax. So Code hat GCC nicht erzeugt (zumindest bei mir nicht, kann nicht ausschließen, dass man ihn doch irgendwie dazu bringen kann
![]() |
Member since Nov 2006
347 posts
|
![]()
Ah dachte schon
![]() |
/* This is O(scary), but seems quick enough in practice. */
|
Datenschutz |
Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev,
© 2003-2011 by Yves Goergen