Algorithmen und Programmierung WS 15/16

Werbung
TU Ilmenau, Fakultät IA
FG Telematik/Rechnernetze
Prof. Dr.-Ing. G. Schäfer
http://www.tu-ilmenau.de/telematik/aup
Algorithmen und Programmierung WS 15/16
Übungsblatt 3
Abgabe der Lösungen am 11.11.2015 in der Vorlesung
Aufgabe 1 (Sichtbarkeit und Speicherhaltung von Variablen)
5 + 1 Punkte
Das folgende Programm wird mit dem Kommandozeilenparameter 13 aufgerufen.
(a) Geben Sie für den resultierenden Programmablauf bei jedem Erreichen einer mit
/* 1 */, /* 2 */, /* 3 */ oder /* 4 */ markierten Zeile die entsprechende Markierung sowie die Namen und Werte aller zu diesem Zeitpunkt (nach Ausführung
der Zeile) im Speicher vorhandenen Variablen an. Geben Sie zudem auch an, ob
die vorhandenen Variablen an dieser Stelle sichtbar sind.
Hinweis: Auch aktuell nicht sichtbare Variablen des Aufrufers einer Funktion
müssen gespeichert bleiben.
(b) Welche Ausgabe liefert das Programm bei Aufruf mit dem Parameter 13?
public c l a s s Scope {
s t a t i c int num = 3 ;
s t a t i c int f o o ( int x ) { /∗ 1 ∗/
i f ( x % 2 == 0 ) {
return x ∗ 2 ;
} else {
int y = num ∗ f o o ( x +1); /∗ 2 ∗/
return y ;
}
}
s t a t i c int bar ( int x ) { /∗ 3 ∗/
int y = x ∗ f o o (num ) ;
return y ;
}
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
i f ( a r g s . l e n g t h <1) {
System . out . p r i n t l n ( ” Usage : j a v a K l a s s e <par : i n t >” ) ;
System . e x i t ( −1);
}
int x = 0 ;
int num = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ; /∗ 4 ∗/
System . out . p r i n t l n ( bar (num ) ) ;
}
}
2
Algorithmen und Programmierung WS 15/16
Übungsblatt 3
Aufgabe 2 (Rechnen mit großen Zahlen in Java)
5 + 1 Punkte
Es gilt 11 + 22 + 33 + · · · + 1010 = 10405071317.
(a) Entwickeln Sie einen Algorithmus in Java, der die letzten 10 Ziffern der folgenden
Summe berechnet:
n
X
ii = 11 + 22 + 33 + · · · + nn
(1)
i=1
Für die Eingabe n ∈ N, n ≥ 0 des Algorithmus soll der Datentyp short benutzt
werden. Hat die Summe weniger als 10 Ziffern, so sollen alle Ziffern berechnet
werden. Benutzen sie ferner zur Berechnung nur primitive Datentypen von Java.
(b) Geben Sie die letzten 10 Ziffern der Summe für n = 1000 an.
Aufgabe 3 (Applikative Algorithmen)
3 Punkte
n!
Der Binomialkoeffizient nk = k!(n−k)!
kann auch rekursiv definiert werden. Dabei gilt
n
=0
k
falls n < k, sowie
n
n
=
=1
0
n
und
n
n−1
n−1
=
+
.
k
k−1
k
Schreiben Sie ein applikatives Programm bin(n,k), welches den Binomialkoeffizienten
rekursiv berechnet.
Aufgabe 4 (Wandlung von Programmierparadigmen)
2 + 3 + 2 Punkte
Formulieren Sie die folgenden applikativen Algorithmen imperativ, nicht rekursiv in
Java. Gehen Sie davon aus, dass es sich bei x und y um ganze Zahlen handelt. Zusätzlich
gelte x ≥ 1. Der Rückgabewert der Algorithmen ist eine Fließkommazahl.
(a) f(x,y) = if (y = 0) then 1
else if (y < 0) then (1.0)/f(x,-y)
else if (y > 0) then x · f(x,y-1) fi fi fi
(b) w(x) = a(x,0,x)
a(x,u,o) = if (o-u < 0.00000001) then (o+u)/2
else if ((o+u)/2 · (o+u)/2 < x) then a(x,(o+u)/2,o)
else a(x,u,(o+u)/2) fi fi
(c) Welche mathematischen Funktionen berechnen diese Algorithmen?
Hinweis: Um in Java bei der Division zweier int-Variablen ein gebrochenes Ergebnis zu
erhalten, können sie eine der Variablen mit 1.0 multiplizieren. Bsp: float z = x*1.0/y
Bitte wenden!
Algorithmen und Programmierung WS 15/16
Übungsblatt 3
Aufgabe 5 (Semantik imperativer Ausdrücke)
3
3 Punkte
Die Semantik imperativer Schleifenkonstrukte kann durch Funktionen auf Zuständen
beschrieben werden. So etwa die while−Schleife:
(
Z, falls Z(B) = false
[[ while B do α od ]] (Z) =
[[ while B do α od ]] ([[ α ]] (Z)), sonst
Geben Sie die Semantik für die do . . . while−Schleife entsprechend an.
Aufgabe 6 (Semantik imperativer Algorithmen)
4 + 1 Punkte
Gegeben sei folgender imperativer Algorithmus:
Q:
var n, q : int;
input n;
q := 0;
while n>0 do
q := q + n + n - 1;
n := n - 1
od
output q.
(a) Werten Sie den imperativen Algorithmus analog zum in der Vorlesung gezeigten
Beispiel (Berechnung der Fakultät, Kapitel 4 Folie 44) auf der Eingabe n = 2
aus. Ebenfalls analog zur Vorlesung dürfen Sie die Abkürzung while β für die
while-Schleife verwenden.
(b) Welche Funktion wird durch den Algorithmus berechnet?
Herunterladen