¡ ¡ 20 ¢ 3£¡ ¤ 8£¦ ¥ ¡ 1 ¥ 20¤ 3£¡£¨ § 17 ¢ 20£¡£¡£ ©

Werbung
Technische Universität München
Fakultät für Informatik
Prof. Dr. M. Broy
SS 2002
Übungsblatt 11
4. Juli 2002
Übungen zu Einführung in die Informatik II
Aufgabe 40
Arbeiten mit dem Stack, Unterprogrammaufruf
a) Arbeiten mit dem Stack: Gegeben sei der arithmetische Ausdruck
20 3 8 1
20 3 17 20 Geben Sie den Berechnungsbaum dieses arithmetischen Ausdrucks an
Geben Sie ein MI-Programm zur Berechnung dieses Ausdrucks an. Verwenden Sie
dabei den Stack als Zwischenspeicher!
b) Unterprogrammaufruf: Geben Sie ein MI-Programm an, das für eine natürliche Zahl x die
n-te Potenz berechnet. Die Berechnung der n-ten Potenz soll dabei in einem Unterprogramm
mittels einer Schleife durchgeführt werden.
Aufgabe 41
MI: Suchen in geordneten Binärbäumen
Gegeben sei folgende (unvollständige) Java Klassendefinition für geordnete Binärbäume über den
natürlichen Zahlen.
class BinSearchTree {
private BinSearchTree left;
private BinSearchTree right;
private int
element;
...
static BinSearchTree search(BinSearchTree b, int n)
while (!isempty(b) && (b.element <> n))
if (n < element(b)) b = b.left;
else
b = b.right;
return b;
}
}
{
Ordnungseigenschaft binärer Suchbäume (Wdh. Blatt 3):
element k bezeichne das an Baumknoten k gespeicherte Datum – hier eine natürliche Zahl; Für jeden Koten k eines binären Suchbaums B muß gelten:
element k element u für alle Knoten u im linken Teilbaum von k
element k element u für alle Knoten u im rechten Teilbaum von k
–2–
a) Wie lassen sich Binärbäume der Klasse BinSearchTree auf der MI repräsentieren?
b) Setzen Sie die Java Methode search, in ein MI-Unterprogramm um.
Aufgabe 42
MI: Lineare Rekursion
Gegeben ist die folgende Pascal-Funktion, die auf positiven ganzen Zahlen operieren soll:
function ggT(a: integer;b: integer):integer;
begin
if a = b then ggT := a
else if a > b then ggT := ggT(a-b,b)
else ggT := ggT(a,b-a);
end
a) Geben Sie eine rekursive MI-Prozedur an, die die Funktion ggT(a,b) berechnet, wobei a
und b auf dem Keller liegen.
b) Veranschaulichen Sie graphisch, wie sich der Keller bei einem rekursiven Aufruf verändert.
c) Geben Sie eine entsprechende repetitive MI-Prozedur an.
Aufgabe 43
MI: Kaskadenartige Rekursion
Binomialkoeffizienten
(vgl. Buch S. 127):
n
m
können durch folgende funktionale Rechenvorschrift berechnet werden
fct binom = (nat n, nat m: n m) nat:
if m 0 n m then 1
else binom(n 1,m) + binom(n 1,m 1) fi
?
?
a) Die Werte n und m seien im Speicher abgelegt. Geben Sie ein MI-Programm an, dass den
Binomialkoeffizienten berechnet. Beschränken Sie sich hier auf eine Befehlssequenz, die
nur das Unterprogramm ohne ein aufrufendes Hauptprogramm enthält!
b) Diskutieren Sie inwieweit eine Optimierung wie in Aufgabe 42 c) möglich ist.
–3–
Aufgabe 44 (P) MI: Suchen in (nicht geordneten) Binärbäumen
In Aufgabe 41 wurde ein MI-Unterprogramm für das Suchen in geordneten Binärbäumen entwickelt. Dieses Unterprogramm hat die Ordnungseigenschaft binärer Suchbäume ausgenutzt, um
das Suchen nicht-rekursiv in einer Schleife zu realisieren. Bei der Suche in nicht-geordneten
Binärbäumen muss rekursiv in beiden Ästen weitergesucht werden. Setzen Sie folgende JavaMethode in ein MI-Unterprogramm um.
static BinTree search(BinTree b, int n)
BinTree t;
if (isempty(b) || (b.element == n))
return b;
else {
t = search(b.left,n);
if (isempty(t))
t = search(b.right,n);
return t;
}
}
{
Herunterladen