Algorithmen und Programmierung II Musterlösung Übung 01 Prof. Dr. H. Schweppe, AlpII-Tutoren SS 2008 Aufgabe 1.1 Das Programm berechnet den größten gemeinsamen Teiler (ggt)zweier natürlichen Zahlen nach dem Euklidischen Algorithmus. Aufgabe 1.2 a=0, b=5, c=8 a a a a = b++ =(b+1) = ++b = --b + c++; + ++c; +(c-1); + c--; // // // // a=13, a=15, a=13, a=12, b=6, b=5, b=6, b=4, c=9 c=9 c=8 c=7 Aufgabe 1.3 a) Ein Java-Programm kann unabhängig von der Maschine, also der zu verfügungstehenden Hardware, und dem Betriebssystem ausgeführt werden. Dazu erfolgt eine Übersetzung des Programms in einen so genannten Java-Bytecode. Dieser kann dann mit einer JVM ausgeführt werden. b) Die JVM dient als Schnittstelle zwischen der Maschine und dem Betriebssystem und ist damit plattformabhängig. Der Bytecode wird also je nach der darunter liegenden Maschine interpretiert / ausgeführt. c) Da die meisten Programmiersprachen nicht interpretiert sondern kompiliert werden. Während der Kompilierung werden nämlich Verweise auf die Laufzeitbibliothek und externe Bibliotheken aufgelöst. Dabei entsteht ein Programm, das nur auf einem Betriebssystem ausgeführt werden kann. Jedoch ist es meist möglich, mit Hilfe eines anderen Betriebssystems und einem entsprechenden Compilers, ein Programm für ein anderes Beitriebssystem zu kompilieren (sprich zu portieren). 1 d) int x = 0; while(true) { print(zufallszahl); } e) Unter JVM versteht man die drei Komponenten: • Klassenlader (classloader und resolver), • Speicherverwaltung und automatische Speicherbereinigung (garbage collection) und die • Ausführungseinheit (execution engine). Und natürlich auch das schon zuvor genannte. Aufgabe 1.4 a) ( § )//xi = c emulieren : // xi auf null setzen TrivLoop xi {xi = xi -1} // c - mal inkrementieren xi = xi +1; .. xi = xi +1 ( § § )// xn auf xj setzen : xn =0; TrivLoop xj {xn = xn +1} xi := xj + c ; //xi auf xj setzen : xi = 0 ( nach ( § ) ) TrivLoop xj { xi := xi + 1 } xn = c // Verwendung der Wertzuweisung da schon in ( § ) emuliert ist . TrivLoop xn { xi := xi + 1 } xn = 0 2 xi := xj - c ; //xi auf xj setzen : xi = 0 ( nach ( § ) ) TrivLoop xj { xi := xi + 1 } xn = c // Verwendung der Wertzuweisung da schon in ( § ) emuliert ist . TrivLoop xn { xi := xi - 1 } xn = 0 b) P → xi := xi xc =0; NOP : = LOOP xc DO P END c) Es wird die Berechnung x1 = x2 −̇x3 mit Hilfe eines IF-THEN-ELSE-Ausdrucks durchgeführt: x1 := x2 ; LOOP x3 DO x4 := 0; LOOP x1 DO x4 := 1; END ; LOOP x4 DO x1 := x1 - 1; END ; // für x2 > x3 END ; Wenn man es genau nimmt hätte man die modifizierte Differenz schon in dem folgenden LOOPProgramm (aus Aufgabenteil (a) ) definieren müssen: xi := xj ; TrivLoop xc { xi := xi - 1 } d) Die Multiplikation (*) wurde schon in der Vorlesung definiert. IF xi = 0 THEN {x0 = 1}; IF xi = 1 THEN {x0 = 1} 3 ELSE { x0 := xi ; xj := xi ; LOOP xi − 1 DO xj := xj - 1; x0 := x0 * xj ; END } Aufgabe 1.5 - 4