IT 2 – WS 2015/2016 – Übungsblatt 3 - 1

Werbung
IT 2 – WS 2015/2016 – Übungsblatt 3
Abgabe: 20.11.2015
Beispiel 3.1 [Swap.java]
Implementieren Sie die Klasse ue41.Swap mit der statischen Methode
static void arrange(SwapList list ),
die die Elemente von list so umordnet, dass alle Elemente mit einer gewissen Eigenschaft vor
den Elementen ohne dieser Eigenschaft angeordnet sind.
Die vordefinierte Klasse ue41.SwapList beschreibt eine Liste von Elementen mit einer
Boole’schen Eigenschaft. Auf eine SwapList können folgenden Methoden angewandt werden:
public class SwapList {
/**
* Returns the number of elements in the list.
* The smallest index in the list is 0.
*/
public int size();
/** Swaps the i-th and j-th element. */
public void swap(int i, int j);
/** Returns true if the i-th Element has the property. */
public boolean hasProperty(int i);
}
Um Ihre Methode arrange() zu testen, wird es notwendig sein, auch die Klasse SwapList zu
implementieren.
Beispiel 3.2 [freiwillig: Routenplaner.java]
Gegeben ist die Klasse Ort im Paket routenplanung. Die Orte sind von 0 beginnend
durchnummeriert. Die Methode
double getDirekteEntfernungZu(Ort andererOrt)
in der Klasse Ort liefert die direkte Entfernung vom befragten Ort zum Ort andererOrt.
Schreiben Sie eine Klasse routenplanung.Routenplaner mit folgenden Eigenschaften:
• Es gibt einen Konstruktor
Routenplaner(Ort[]ortsliste),
der den Routenplaner für diese Liste von Orten anlegt.
• Es gibt eine Methode
double getKuerzesteEntfernung(Ort start, Ort ziel),
die die Länge des kürzesten Weges von start nach ziel über höchstens einen Ort als
Zwischenstation zurückliefert. Beachten Sie, dass der Weg über eine Zwischenstation
kürzer sein kann als der direkte Weg.
-1-
IT 2 – WS 2015/2016 – Übungsblatt 3
Beispiel 3.3
Gegeben sind die Klassen Webseite und Suchmaschine. Die Klasse Suchmaschine verfügt
über den Konstruktor
public Suchmaschine(ArrayList<Webseite> dieWebseiten)
sowie über die Methode
public ArrayList<Webseite> finde(String wort),
die eine Liste von allen (durch den Konstruktor bekannten) Webseiten zurückgibt, die wort
enthalten.
Schreiben Sie eine Klasse ErweiterteSuchmaschine, die von Suchmaschine erbt und das
folgende Interface ErweiterteSuche implementiert:
interface ErweiterteSuche {
/**
* Gibt eine Liste von allen Webseiten zurück,
* die posWort enthalten und negWort nicht enthalten.
*/
public ArrayList<Webseite> findeMitOhne(String posWort,
String negWort);
}
Die Klasse ErweiterteSuchmaschine soll auch über den Konstruktor
public ErweiterteSuchmaschine(ArrayList<Webseite> dieWebseiten)
verfügen.
Beispiel 3.4
Gegeben ist eine Klasse Ort mit der Methode
double getDistanzZu(Ort andererOrt),
die die Distanz zu dem anderen Ort zurückliefert. Weiters ist die Unterklasse Tankstelle der
Klasse Ort gegeben.
Schreiben Sie eine Klasse LKW mit dem Konstruktor
LKW(double reichweite),
dem die Reichweite des LKWs bei vollem Tank übergeben wird. Die Klasse LKW soll
weiters die Methode
ArrayList<Tankstelle> berechneTankstops(Ort[] route)
enthalten, die berechnet, an welchen Orten der angegebenen Route der LKW aufgetankt
werden muss, um sein Ziel zu erreichen. Die Auswahl der Tankstops soll so erfolgen, dass
ihre Anzahl möglichst gering ist.
Sie können annehmen, dass die Route aus zumindest zwei Orten besteht, und dass die Fahrt
des LKWs voll getankt im Ort route[0] beginnt.
Natürlich kann der LKW nur an Orten betankt werden, die Tankstellen sind. Dies kann z.B.
mittels (route[i] instanceof Tankstelle) überprüft werden.
Liegen die Tankstellen soweit auseinander, dass der LKW die Route nicht abfahren kann,
dann soll die Methode null zurückliefern.
-2-
IT 2 – WS 2015/2016 – Übungsblatt 3
Beispiel 3.5 [Hanoi.java]
In dieser Aufgabe soll der Lösungsweg für das Problem der „Türme von Hanoi“ berechnet
werden. Dieses Problem besteht aus drei Stäben A, B und C, auf die mehrere gelochte
Scheiben gelegt werden können, welche alle unterschiedlich groß sind (siehe Abb. unten). Zu
Beginn liegen alle Scheiben auf Stab A, der Größe nach geordnet, mit der größten Scheibe
unten und der kleinsten oben. Ziel des Spiels ist es, den kompletten Scheiben-Stapel von A
nach C zu versetzen. Bei jedem Zug darf die oberste Scheibe eines beliebigen Stabes auf
einen der beiden anderen Stäbe gelegt werden, vorausgesetzt, dort liegt nicht schon eine
kleinere Scheibe. Folglich sind zu jedem Zeitpunkt des Spieles die Scheiben auf jedem Stab
der Größe nach geordnet.
Implementieren Sie die Klasse ue51.Hanoi mit der statischen Methode
public static ArrayList<String> getHanoiSequence(int n),
die den Lösungsweg für ein Problem der Größe n (=Anzahl der Scheiben auf Stab A)
berechnet und die notwendigen Bewegungen der Scheiben (in der richtigen Reihenfolge) als
ArrayList ausgibt. Dabei werden die Bewegungen durch folgende Strings bezeichnet:
"AB" … lege die oberste Scheibe von A auf B
"AC" … lege die oberste Scheibe von A auf C
"BA" … lege die oberste Scheibe von B auf A
usw.
Stab A
Stab B
Abb. „Türme von Hanoi“
-3-
Stab C
IT 2 – WS 2015/2016 – Übungsblatt 3
Beispiel 3.6 [* LoeseFormel.java]
Gegeben ist folgendes Java Interface:
interface Formula {
int length();
boolean evaluate(boolean[] v);
}
Dabei gibt length() die Länge der Arrays an, die an evaluate() übergeben werden können.
Schreiben Sie die Klasse LoeseFormel mit einem parameterlosen Konstruktor und der
Methode
public boolean[] findSolution(Formula f),
die ein boolean-Array solution der Länge f.length() zurückliefert, sodass f.evaluate(solution)
den Wert true ergibt. Existiert ein solches Array solution nicht, soll null zurückgeliefert
werden.
Hinweis: Es müssen alle möglichen Inhalte des boolean-Arrays ausprobiert werden, bis ein
passender gefunden ist.
-4-
Herunterladen