Übungen zur Lehrveranstaltung
"Programmierkurs Java"
WS 1999/2000
FB Informatik
D. Boles
Übungsblatt 6
Ausgabe: 24.11.99
Hinweise: Zur Lösung der Aufgaben dürfen nur Konzepte benutzt werden, die in der Vorlesung schon behandelt worden sind.
Aufgabe 23 (Funktionen): 55 Punkte
Implementieren Sie in Java folgende Prozeduren/Funktionen! Achten Sie auf Randfälle und nicht korrekte Parameterübergaben! Überprüfen Sie aber zunächst für jede Funktion, ob sie überhaupt mit den (bisher bekannten) Konzepten in Java implementiert werden kann und wenn nicht, begründen sie, wieso nicht!
(1) eine Funktion, die den Betrag eines übergebenen double-Wertes liefert (Beispiel: f(-2.3) == 2.3)
(2) eine Funktion, die testet, ob eine als Parameter übergebene natürliche Zahl eine Primzahl ist oder nicht (Beispiel: f(7) == true),
(3) eine Funktion, die die nächst höhere Primzahl einer als Parameter übergebenen ganzen Zahl liefert (Beispiel: f(8) == 11),
(4) eine Prozedur, die die Werte zweier als Parameter übergebener int-Variablen vertauscht (Beispiel: int a=3; int b=5; f(a, b); Ergebnis: a==5; b==3;),
(5) eine Funktion, die als ersten Parameter eine Funktion g:int->int und als zweiten Parameter einen int-Wert i übergeben bekommt und die als Ergebnis g(i) liefert (Beispiel: public static int quadrat(int i) {return i*i;} und f(quadrat, 3) == 9),
(6) eine Funktion, die den größten gemeinsamen Teiler zweier als Parameter übergebener natürlicher Zahlen liefert (Beispiel: f(15, 10) == 5),
(7) eine Funktion, die das kleinste gemeinsame Vielfache zweier als Parameter übergebener natürlicher Zahlen liefert (Beispiel: f(6, 8) == 24),
(8) eine Funktion, die als ersten Parameter einen int-Wert n und daraufhin n weitere int-Parameter übergeben bekommt, deren Summe geliefert werden soll (Beispiel: f(4, 22, 33, 44, -3) == 96).
(9) eine Funktion, die als ersten Parameter einen double-Wert x und als zweiten Parameter einen int-Wert n übergeben bekommt, und die die n-te Potenz von x als Ergebnis liefern soll (Beispiel: f(2.0, 3) == 8.0)
(10) eine Funktion, die die Differenz zweier Uhrzeiten als Ergebnis liefert; Uhrzeiten werden dabei als float-Werte realisiert, wobei die Vorkommastellen die Stunden und die Nachkommastellen die Minuten darstellen (Beispiel: f(14.31f, 15.46f) == 1.15f)
(11) eine Funktion, die als Parameter einen char-Wert übergeben bekommt und die als Ergebnis die Position dieses Charakters im Alphabet zurückliefert; ist der übergebene Parameter kein Buchstabe soll die Funktion den Wert false liefern (Beispiel: f(‘b’) = 2, f(‘!’) == false)
Schreiben Sie ein Programm, das einem Benutzer eine Auswahl zur Ausführung der implementierbaren Funktionen anbietet und anschließend jeweils passende Werte für die aktuellen Parameter einliest. Achten Sie darauf, daß die Funktionen nur mit zulässigen Werten aufgerufen werden.
Aufgabe 24 (Hamster-Modell / Funktionen): 24 Punkte
Schreiben Sie für das Hamstermodell folgende Funktionen; achten Sie darauf, daß der Zustand der Hamsterwelt nach Beendigung der Funktion jeweils identisch ist mit dem vorher gültigen Zustand (gleiche Position und Blickrichtung des Hamsters, gleiche Anzahl an Körner in den Backen des Hamsters, gleiche Anzahl von Körnern auf den Kacheln) (außer bei (7) und (8)):
(1) eine Funktion, die die Anzahl an Körnern liefert, die der Hamster gerade im Maul hat,
(2) eine Funktion, die die Anzahl an Körnern liefert, die sich auf dem Feld befinden, auf dem der Hamster gerade steht,
(3) eine Funktion, die testet, ob sich links vom Hamster eine Mauer befindet,
(4) eine Funktion, die testet, ob sich hinter dem Hamster eine Mauer befindet,
(5) eine Funktion, die testet, ob der Hamster in eine Sackgasse gelaufen ist (das bedeutet, daß vor ihm, links von ihm und rechts von ihm jeweils Mauern sind),
(6) eine Funktion, die testet, ob die nächsten n-Felder vor dem Hamster frei sind oder nicht,
(7) eine Prozedur linksUm, die als Parameter die Anzahl an Linksdrehungen übergeben bekommt,
(8) eine Funktion gib, die als Parameter die Anzahl an Körnern übergeben bekommt, die der Hamster ablegen soll; ist die übergebene Anzahl größer als die Anzahl der Körner in den Backen des Hamsters, so soll kein Korn abgelegt und stattdessen der Wert false geliefert werden; im Erfolgsfall soll der Wert true geliefert werden
Überzeugen Sie den Tutor durch kleine Beispielprogramme von der Korrektheit Ihrer Lösungen.
Aufgabe 25 (Hamster-Modell ): 21 Punkte
Schreiben Sie ein Hamsterprogramm, das folgendes Problem löst: Der Hamster steht irgendwo in einem durch Mauern abgeschlossenen quadratischen Raum unbekannter Größe ohne innere Mauern und ohne Körner auf den Kacheln. Die Wände sind eine ungerade Anzahl von Kacheln lang. Er hat eine beliebige Anzahl von Körnern im Maul. Seine Aufgabe besteht darin, zentriert im Raum eine rautenförmige Fläche mit seinen Körnern auszulegen. Die Größe der Fläche ist dabei durch die Größe des Raumes bzw. durch die Menge an Körnern, die der Hamster bei sich trägt, limitiert. Siehe auch die beiden Abbildungen, in der zwei typische Endsituationen skizziert werden. Im linken Teil hatte der Hamster anfangs 15 Körner im Maul, er braucht davon 13 für die Zeichnung der Raute. Im rechten Teil besaß er 100 Körner, wovon er ebenfalls 13 verbraucht hat, um seine Aufgabe zu erledigen.
