Algorithmen und Programmierung II Aufgabe 1.1 Aufgabe 1.2

Werbung
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
Herunterladen