Aufgaben zur Veranstaltung Programmieren in Java / IT-Grundlagen, WS 2016/2017 H. Pflug, M. Nellesen FH Aachen, Campus Jülich; IT Center, RWTH Aachen Übungsblatt 3 26.10./27.10.2016 Präsenzaufgaben Die Aufgaben werden von Ihnen am Ende der Übung vorgestellt. Fakultät Programmieren Sie die Klasse public class Fakultaet die verschiedene Funktionen zur Berechnung von Fakultäten enthält. Dazu sollen zunächst die folgenden Funktionen implementiert werden: public static int berechneFakultaetInteger(int n) //berechnet zu dem uebergebenen n die Fakultaet, zur Berechnungen //wird eine Variable vom Typ int verwendet public static long berechneFakultaetLong(int n) //berechnet zu dem uebergebenen n die Fakultaet, zur Berechnungen //wird eine Variable vom Typ long verwendet public static void teste(int n) //ruft die verschiedenen Funktionen zur Berechnung der Fakultaeten //auf und gibt das Ergebnis der einzelnen Berechnungen sowie die //uebergebene Zahl auf der Konsole aus Testen Sie Ihre Funktionen mit den Werten 5,10,20,50,100 und 1000. Welche Beobachtungen können Sie bei der Berechnung der Fakultäten machen? Wodurch lässt sich dieses Verhalten erklären? Schreiben Sie außerdem die Funktionen public static int getMaxIntFakultaet() public static int getMaxLongFakultaet() Die Funktionen berechnen den maximalen Wert, dessen Fakultät noch in eine int- bzw. longVariable passt. Um auch größere Fakultäten berechnen zu können, erweitern Sie ihr Programm um die Methode: public static BigInteger berechneFakultaetBigInteger(int n) //berechnet zu dem uebergebenen n die Fakultaet, zur Berechnungen //wird die Klasse BigInteger verwendet Die Klasse BigInteger ermöglicht die Berechnung von großen Fakultäten. Die passenden Konstruktoren und Methoden können Sie in der API finden. Fügen Sie die neue Methode zur Berechnung der Testfälle hinzu und vergleichen Sie die Ergebnisse. Aufgabenblatt Programmieren in Java / IT-Grundlagen WS 16/17; H. Pflug, M. Nellesen Vergleichswerte: 5! = 120 10! = 3628800 20! = 2432902008176640000 50! = 30414093201713378043612608166064768844377641568960512000000000000 HashMaps In vielen Fachbüchern findet man am Ende ein Sachwortverzeichnis, auch unter der Bezeichnung Index bekannt. Ein Index besteht aus einer Übersicht aller wichtigen Begriffe im Buch und den Seitenzahlen, auf denen sich die Begriffe finden lassen. Auf dem folgenden Bild sehen Sie ein Beispiel für einen Index: Implementieren Sie eine Klasse Index, die ein solches Sachwortverzeichnis repräsentiert. Die Klasse soll über folgende Konstruktoren und Methoden verfügen: a) Default-Konstruktor, der einen leeren Index erzeugt. b) Copy-Konstruktor, durch den der neue Index alle Einträge erhält, die der als Parameter übergebene Index zum Zeitpunkt des Aufrufs besitzt. Achten Sie hierbei auf die Datenkapselung! c) eine Methode begriffHinzufuegen, die als Parameter einen Begriff (String) und eine Seitenzahl (int) übergeben bekommt. Begriff und Seitenzahlen sollen durch die Methode im Index vermerkt werden. Beachten Sie: In einem Index dürfen keine doppelten Begriffe enthalten sein, ebenso keine doppelten Seitenzahlen zu einem Begriff. d) eine toString-Methode, die den aktuellen Status des Index zurückgibt. Der Status soll wie folgt aufgebaut sein: <begriff1>: <seite1>, <seite2>, …, <seiteN> <begriff2>: <seite1>, <seite2>, …, <seiteN> … 2 Aufgabenblatt Programmieren in Java / IT-Grundlagen WS 16/17; H. Pflug, M. Nellesen Testen Sie Ihr Programm mit folgendem Beispiel: public class IndexTest { public static void main(String[] args) { Index index = new Index(); index.hinzufuegen("boolean", 1); index.hinzufuegen("boolean", 15); index.hinzufuegen("boolean", 3); index.hinzufuegen("boolean", 15); Index index2 = new Index(index); index.hinzufuegen("if", 45); index.hinzufuegen("if", 2); index.hinzufuegen("if", 10); index.hinzufuegen("if", 45); System.out.println(("index"); System.out.println(index); System.out.println(("index2"); System.out.println(index2); } } Es sollte folgende Ausgabe zu sehen sein: index boolean: 1, 15, 3 if: 45, 2, 10 index2 boolean: 1, 15, 3 Größte Teilfolge Programmieren Sie eine Funktion public static double[] getMaxTeilfolge(double[] x) Diese Funktion erhält eine Folge x als Übergabeparameter und gibt die Teilfolge mit der größten Summe zurück. Dabei muss die Teilfolge zusammenhängend sein, d.h. Ihre Elemente müssen im Feld direkt aufeinander folgen. Beispiel: Für x= {-2,3,1,-5,3,1,-2,3,4,1,-2,-3,4} wäre das Ergebnis {3,1,-2,3,4,1}. Die Summe dieser Teilfolge (10) wird von keiner anderen Teilfolge übertroffen. 3