Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik (MST) Sommersemester 09 Prof. Dr. Wolfram Burgard Dr. Cyrill Stachniss Dipl. Inf. Axel Rottmann Übungsblatt 8 Abgabe bis Mittwoch, 24.06.09, 18 Uhr Hinweis: Programmieraufgaben immer per Email (eine Email pro Blatt und Gruppe) an den zuständigen Tutor schicken (Java Quellcode und eventuell benötigte Datendateien). Schriftliche Lösungen bitte ebenfalls als Textdatei an den zuständigen Tutor schicken oder in die Briefkästen in Geb. 051, Erdgeschoss einwerfen. Für den Erhalt von Bonuspunkten müssen Sie in wenigstens 9 Übungen anwesend sein und zum Vorrechnen einer Aufgabe diese bearbeitet und termingerecht abgegeben haben. Aufgabe 8.1 1. Schreiben Sie eine rekursive Java Methode fakultaet, die zu einer Eingabe n ∈ N die Fakultät (n! = 1 · 2 · . . . · n) berechnet. 2. Das Pascalsche Dreieck beschreibt Zahlen, genauer gesagt die Binominalkoeffizienten, die in Dreiecksform angeordnet werden. Die Zahlen sind im Dreieck derart angeordnet, so dass jeder Eintrag der Summe der zwei darüberstehenden Einträge entspricht. Zeile 0 Zeile 1 Zeile 2 ... 1 1 1 1 1 2 3 1 4 1 3 6 1 4 1 Spalte 0 Spalte 1 ... Schreiben Sie eine rekursive Java-Methode, die ein einzelnes Element des Pascalschen Dreiecks berechnet. Das Element wird über die Zeilen und Spaltennummer spezifiziert. int pascal(int zeile, int spalte) { .... } Aufgabe 8.2 Betrachten Sie die folgende Funktion f : Z → Z (Z sind die ganzen Zahlen): 0 x f (x, y) = f (x, y − 1) f (x − 1, y) , , , , x=y=0 x = y, x 6= 0, y 6= 0 x<y x>y 1. Schreiben Sie eine rekursive Java-Methode, die die Funktion f implementiert. 2. Zeichnen Sie die Activation Records für den Aufruf f (3, 1) zu dem Zeitpunkt, an dem die maximale Rekursionstiefe erreicht ist. Aufgabe 8.3 Schreiben Sie ein Programm, das Ihnen die Ziehung der Lottozahlen simuliert. Dabei soll man festlegen können, aus welchem Zahlenbereich x ∈ {1, 2, . . . , M } wieviele Zahlen gezogen werden. Beachten Sie, dass jede Zahl nur einmal gezogen werden kann. Am Ende sollen die gezogenen Zahlen in sortierter Reihenfolge ausgegeben werden. Zur Erzeugung der Zufallszahlen können Sie die Klasse RandomNumber von der Homepage verwenden. Beachten Sie dabei, dass getRandomNumber(int max) eine Integer-Zahl zwischen 0 und max − 1 zurückliefert (jeweils inklusive). Aufgabe 8.4 Schreiben Sie ein Klasse, die ein Polynom P (x) beliebigen Grades n ≥ 0 repräsentiert. P (x) = a0 + a1 x + a2 x2 + . . . + an xn Der Grad n soll dem Konstruktor als Parameter übergeben werden. Implementieren Sie unter anderem eine rekursive Methode root, die eine Nullstelle in einem vorgegeben Intervall left und right mittels Intervallhalbierung berechnet. Was muss für die Intervallgrenzen gelten? import java.util.*; public class Polynom{ public Polynom(int n) {...} public double root(double left, double right) {...} ... int n; Vector<Double> a; } 2