Ubungsblatt 3

Werbung
Algorithmen und Programmierung
Fachgebiet Telematik/Rechnernetze
WS 12/13
Prof. Dr.-Ing. Günter Schäfer
Übungsblatt 3
Aufgabe 1
3 Punkte
Gegeben seien drei Zahlenvariablen a, b und c, welche Sie beim Programmaufruf als
Kommandozeilenparameter übergeben bekommen.
a) Schreiben Sie ein Java-Programm Numbers, das von diesen drei Zahlen die Summe, das Produkt und das arithmetische Mittel berechnet und ausgibt. Weiterhin
soll der Median ausgegeben werden.
b) Entwerfen Sie einen Algorithmus Sort, der die Variableninhalte so umordnet,
dass a ≤ b ≤ c ist. Formulieren Sie den Algorithmus zuerst als Pseudocode oder
als Struktogramm. Setzen Sie ihn anschließend in Java um.
c) Geben Sie Testdaten für die drei Zahlen an, um alle möglichen unterschiedlichen
Fälle für die Sortierung zu testen.
Aufgabe 2
2 Punkte
Bitte schreiben Sie einen applikativen Algorithmus zur Berechnung der Potenz xy
(x, y ∈ N ∪ {0}). Dieser Algorithmus soll keine Multiplikation durchführen. Schreiben Sie stattdessen bitte die zugehörige Funktion zur Multiplikation mit Hilfe von
einzelnen Additionen.
Aufgabe 3
3 Punkte
Eine Zeitangabe erfolgt normalerweise in der Form h:min:sec.
a) Schreiben Sie ein Java Programm Time, das eine gegebene Zahl von Sekunden in die Darstellung h:min:sec umwandelt und ausgibt. Beispielsweise soll für
s = 14567 ausgegeben werden: 04:02:47.
b) In einem Laborexperiment sollen im Abstand von 700 Sekunden Messungen erfolgen und protokolliert werden. Schreiben Sie ein Programm, das ein Vordruck
zum Eintragen von 20 Messungen auf dem Bildschirm in folgender Form ausgibt:
Nr. Sekunden h:min:sec
1 700 00:11:40
2 1400 00:23:20
... ... ...
20 14000 03:53:20
Wie muss man das Programm verändern, damit im Formular alle Zeiten innerhalb der ersten fünf Stunden protokolliert werden?
UB3.tex @ 23. Oktober 2012 : 17:18
Aufgabe 4
2 Punkte
Welche Funktion wird durch die folgende Definition realisiert? Beschreiben Sie die
Auswertung an einem Beispiel (mit mindestens fünf Schritten! ;-D).
f(x, y) = if y = 0 then x
else f(x - 1, y - 1) fi
Aufgabe 5
3 Punkte
√
Newton hat für die Berechnung der Quadratwurzel a , a > 0 die folgende Näherungsformel angegeben:
x2n
xn
· 3−
xn+1 :=
2
a
Bitte schreiben Sie eine Methode, die diese Näherungsformel implementiert. Die Iteration ist mit x0 = 1 zu beginnen und soll abbrechen, wenn die Abweichung zwischen
x2n und a weniger als 10−7 beträgt.
Betten Sie diese Methode in eine Rahmenpogramm ein, welches ein beliebiges a als
Kommandozeilenparameter annimmt, dafür die Quadratwurzel berechnet und anschließend ausgibt.
Auf bestehende Methoden der Java-Bibliotheken wie Math.pow(), Math.abs() und
Math.sqrt() greifen Sie in diesem Fall bitte nicht zu.
Aufgabe 6
4 Punkte
Implementieren Sie folgende applikativen Algorithmen in Java:
a) f(x) = if x>100 then x-10 else f(f(x+11)) fi
b) g(x) = if x=1 then 1 else g(h(x)) fi
h(x) = if even(x) then x/2 else 3*x+1 fi
Was berechnen die Funktionen f(x) und g(x)? Gibt es Fälle, in denen eine der Funktionen nicht terminiert?
Aufgabe 7
2 Punkte
2004 hatte Indien 1.033 Millionen Einwohner bei einem jährlichen Bevölkerungswachstum von 1,51%. China dagegen hatte 1.279 Millionen Einwohner bei einem jährlichen
Bevölkerungswachstum von 0,73%. Erstellen Sie ein Java-Programm, das für jedes
Jahr die Jahreszahl und die Einwohnerzahlen der beiden Länder ausgibt, bis die Einwohnerzahl Indiens die von China übertrifft. Geben Sie dieses Jahr in Ihrer Lösung
an.
Aufgabe 8
2 Punkte
Geben Sie an, welche Variablen an den mit /* 1 */, /* 2 */, /* 3 */ und /* 4 */ gekennzeichneten Stellen im folgenden Programm existieren und welche davon sichtbar
2
sind. Begründen Sie Ihre Antwort.
Verwenden Sie für die Begründung der Sichtbarkeit die aus der Vorlesung bekannte
Darstellung.
public class Klasse {
static int number = 5;
static int compute2(int z) { /∗ 1 ∗/
if (z % 2 == 0) {
return z + 1;
} else {
int y = number + 5;
System.out.println(”y = ” + y); /∗ 2 ∗/
return z − 1;
}
}
static int compute1(int x) { /∗ 3 ∗/
int y = x ∗ compute2(number);
return y;
}
public static void main(String [ ] args) {
if (args.length<1){
System.out.println(”Usage java Klasse <par:int>”);
System.exit(−1);
}
int number = Integer.parseInt(args [0]); /∗ 4 ∗/
System.out.println(compute1(number));
}
}
3
Herunterladen