H. Schweppe I. Dageförde Algorithmen und Programmierung II Objektorientierte Programmierung Ausgabe: 24.4.2008 Abgabe: 2.5.2008, 10:00 Übung 2 Aufgabe 2.1 (10 P) a) Definieren Sie die Befehle xi = xj + c , xi = xj - c durch ein elementares while-Programm mit den Befehlen xi = xi +1 , xi = xi -1, while x != 0 {P}. Im Folgenden können alle Befehle, die schon definiert sind (VL oder Ihre Lösungen) verwendet werden. Definieren Sie folgende Befehle durch ein while-Programm: b) NOP (no operation), der nichts tut c) xi = xj - xk d) if xi > c then {P} e) if xi = xj then {P1} else {P2} Aufgabe 2.2 (10 P) a) Viele Programmiersprachen kennen die abweisende Schleife repeat {P} until x=0 Mit der Semantik: führe P so lange aus, bis x den Wert 0 hat. Die Prüfung findet nach der Ausführung von P statt. Zeigen Sie, dass repeat- und while-Programme äquivalent sind, also while durch repeat und umgekehrt ausgedrückt werden können. Dazu können Sie außer den Zuweisungen von while-Registermaschinen Fallunterscheidungen (Vorlesung, Übung 2.1) verwenden. b) Schreiben Sie ein while-Programm zur Berechnung von xi = xj DIV xk und xm = xj MOD xk . c) Welchen Fehler hat die folgende Implementierung des μ-( "mü"-)Operators durch ein while-Programm? i=0; y=1; while (y > 0 ) {y=g(i,x), i=i+1;}; Aufgabe 2.3 (10 P) a) Verändern Sie das Beispielprogramm Primes.java so, dass die Dichte der Primzahlen jeweils in Hunderterschritten ermittelt und ausgedruckt wird. Die Dichte (pro 100) ist hier definert als (Anzahl Primzahlen zwischen n und n+100 ) / 100.0 . Verzichten Sie auf die Ausgabe der Primzahlen selbst und geben Sie lediglich in Hunderterschritten die Dichte aus, etwa "Von 1700 bis 1800: 0.12". b) Das in PASCAL auf einer Folie angegebene Programm "eratos" implementiert einen etwas anderen Algorithmus, nämlich das Sieb des Eratostenes. Implementieren Sie diesen Algorithmus in Java. 1 H. Schweppe I. Dageförde Algorithmen und Programmierung II Objektorientierte Programmierung Ausgabe: 24.4.2008 Abgabe: 2.5.2008, 10:00 Aufgabe 2.4 (10 P) a) System.out.println(" MAX_VALUE+1 =="+(Integer.MAX_VALUE+1)); liefert folgende Ausgabe: MAX_VALUE+1 ==-2147483648 . Dagegen ist Infinity + 1 == Infinity + 2. Erklären Sie das Verhalten. Informieren Sie sich ggf. über den IEEE-Standard zu Gleitpunktzahlen. b) Beschreiben Sie möglichst präzise in wenigen Zeilen zentrale Unterschiede zwischen imperativer und funktionaler Programmierung. 2