17 00 01 Übungen zu Computeranwendung und Programmierung WS 13/14 Übungseinheit 18. - 22. November 2013 Aufgabe 1 Schreiben Sie eine Klasse EinfacheStatistik1, zur Berechnung von Mittelwert und Varianz einer Menge von Gleitkommazahlen, die in einer ArrayList mit dem Bezeichner werte gespeichert werden. Die Klasse soll über einen Konstruktor public EinfacheStatistik1() verfügen, der die ArrayList werte erzeugt. Die Methode public void addWerte(double z) fügt der ArrayList werte die Zahl z hinzu. Die Methode public double getMittelwert() soll den Mittelwert aller in werte gespeicherten Zahlen zurückgeben. Den Mittelwert z̄ der Zahlen z1 , z2 , . . . , zn berechnet man nach der Vorschrift i=n X z̄ = ( zi )/n i=1 Eine weitere Methode public double getVarianz() soll die Varianz v der Zahlen z1 , z2 , . . . , zn zurückgeben. Die Varianz v berechnet man nach der Formel i=n X 1 v= (zi − z̄)2 (n − 1) i=1 Aufgabe 2 Schreiben Sie eine Klasse Bruch, mit den Attributen zaehler und nenner sowie einem Konstruktor public Bruch(int z, int n) der einen Bruch mit dem Zähler z und dem Nenner n erzeugt. Diese Klasse soll auch über die üblichen set- und get-Methoden (getZaehler(), getNenner(), . . .) verfügen, um auf zaehler und nenner zugreifen, sowie diese verändern zu können. Eine Methode public void kuerzeBruch() soll den Bruch kürzen, indem zaehler und nenner durch ihren größten gemeinsamen Teiler dividiert werden. Den größten gemeinsamen Teiler zweier positiver ganzer Zahlen a und b soll die Methode public int ggT(int a, int b) liefern. Der größte gemeinsame Teiler soll nach dem klassischen Algorithmus von Euklid berechnet werden. Das ist jenes Verfahren, das Sie in Mathematik I unter dem Namen ’Euklidscher Algorithmus (Subtraktionsform)’ kennengelernt haben! Aufgabe 3 Schreiben Sie eine Klasse Polynom zur Darstellung von Polynomen p(x) = a0 xn + a1 xn−1 a2 xn−2 + . . . + an−1 x + an , indem die Koeffizienten a0 , a1 , . . . , an eines Polynoms in einer ArrayList<Double> gespeichert werden. Die Klasse soll über einen Konstruktor public Polynom() verfügen, der ein Objekt erzeugt, das ein Polynom ohne Koeffizienten repräsentiert. Die Methode public void addKoeffizient(double a) soll an ein Polynom mit den Koeffizienten a0 , a1 , . . . , an , einen Koeffizienten an+1 anfügen. Die Methode public double gibWert(double x) soll den Wert des Polynoms an der Stelle x nach der Horner-Regel berechnen und zurückgeben. Zur Horner-Regel sei auf Mathematik I verwiesen! Die Methode public Double maxKoeffizient() soll den (einen) größten Koeffizienten des Polynoms zurückgeben. Hat ein Polynom keine Koeffizienten, so soll null zurückgegeben werden. Aufgabe 4 Schreiben Sie eine Klasse Zimmer mit dem Konstruktor public Zimmer(int zimmernummer, int anzahlBetten) Dabei gibt anzahlBetten die Anzahl der Betten im Zimmer an. Überlegen Sie, nachdem Sie die gesamte Aufgabenstellung verstanden haben, über welche Methoden und Attribute diese Klasse verfügen sollte! Schreiben Sie weiters eine Klasse Hotel mit dem Konstruktor public Hotel(int anfangsnummer, int endnummer), der ein Hotel mit Zimmern oder ohne Zimmer erzeugt. Ist anfangsnummer ≤ endnummer so legt der Konstruktor freie Zimmer mit Zimmernummern von anfangsnummer bis inklusive endnummer an. Ist anfangsnummer > endnummer, so soll dieser Konstruktor ein Hotel ohne Zimmer anlegen! Entscheiden Sie mit einem Zufallsgenerator, ob die angelegten Zimmer jeweils Einzelzimmer, Doppelzimmer oder Dreibettzimmer sind. Implementieren Sie auch die folgenden Methoden: public ArrayList<Zimmer> getFreieDoppelzimmer() liefert eine ArrayList mit allen freien Doppelzimmern, d.h. Zimmern mit genau zwei Betten, welche nicht reserviert sind (die Größe der ArrayList soll genau der Anzahl der freien Zimmer mit genau zwei Betten entsprechen). public int fuegeZimmerHinzu(Zimmer[] neueZimmer) erweitert das Hotel mit neuen Zimmern aus dem Array neueZimmer. Ein Zimmer aus neueZimmer kann nur hinzugefügt werden, wenn die Zimmernummer noch nicht im Hotel vergeben wurde. Die Methode liefert die Anzahl der hinzugefügten Zimmer zurück. public boolean reserviereZimmer(int zimmernummer) reserviert das Zimmer mit der Nummer zimmernummer des Hotels. Wenn dieses Zimmer belegt ist oder im Hotel nicht existiert, liefert die Methode false zurück. Andernfalls wird das Zimmer reserviert und true zurückgegeben. Aufgabe 5 Schreiben Sie eine Klasse Aktie mit dem Konstruktor public Aktie(String bezeichnung) bezeichnung enthält den Namen der AG, die diese Aktie ausgibt. Darüber hinaus soll jede Aktie über folgende Informationen verfügen: kurs gibt den aktuellen Kurs an; anzahl gibt an, wie viele Aktien dieser bezeichnung vorhanden sind; letzteWoche gibt an, um wieviel der Kurs der Aktie in der letzten Woche gefallen (letzteWoche < 0) oder gestiegen ist (letzteWoche > 0). Wird eine neue Aktie angelegt, so soll kurs eine zufällig gewählte double-Zahl aus dem Intervall [20, 150), anzahl eine zufällig gewählte int-Zahl aus dem Intervall [200, 800] und letzteWoche eine zufällig gewählte double-Zahl aus dem Intervall [−5, 5) sein. Überlegen Sie, nachdem Sie die gesamte Aufgabenstellung verstanden haben, über welche Methoden diese Klasse verfügen sollte! (Die üblichen set- bzw. get-Methoden, um auf die Attribute zugreifen zu können, müssen natürlich vorhanden sein!) Schreiben Sie weiters eine Klasse Aktiendepot mit dem Konstruktor public Aktiendepot(), der ein Depot ohne Aktien erzeugt. Implementieren Sie auch die folgenden Methoden: public void ergaenzeListe(Aktie[] neueAktien) fügt Aktien aus dem Array neueAktien dem Depot hinzu, wenn diese Aktien im Depot noch nicht vorhanden sind. (Hinweis: Zwei Aktien gelten als gleich, wenn sie dieselbe bezeichnung haben!) Ist eine Aktie im Depot bereits vorhanden, so sollen die Werte für letzteWoche und kurs aktualisiert werden. Außerdem wird bei einer positiven Kursentwicklung anzahl entsprechend erhöht, andernfalls wird die Aktienanzahl nicht verändert. public ArrayList<Aktie> getHoherKursFallend(double hoch) liefert eine ArrayList mit allen im Depot befindlichen Aktien mit einem Kurs ≥ hoch zurück, die während der letzten Woche eine negative Entwicklung nahmen. Diese Aktien sollen darüber hinaus von der Methode getHoherKursFallend aus dem Depot entfernt werden! Aufgabe 6 Schreiben Sie eine Klasse Buch mit dem Konstruktor public Buch(String autor, String titel, String isbn, int anzahlSeiten, boolean taschenbuch, String sprache) Dabei ist isbn die ISBN-Nummer des Buches; taschenbuch hat den Wert true, falls das Buch ein Taschenbuch ist, ansonsten false. Überlegen Sie, nachdem Sie die gesamte Aufgabenstellung verstanden haben, über welche Methoden und Attribute diese Klasse verfügen sollte! Schreiben Sie weiters eine Klasse Buecherverzeichnis mit dem Konstruktor public Buecherverzeichnis(), der ein Bücherverzeichnis ohne Bücher erzeugt. Implementieren Sie auch die folgenden Methoden: public int gibAnzahlDeutscherTaschenbuecher() liefert die Anzahl der deutschsprachigen Taschenbücher zurück (d.h. jene Bücher, wo sprache den Wert “deutsch” und taschenbuch den Wert true haben). public boolean addBuch(Buch einBuch) fügt einBuch der Bücherliste des Bücherverzeichnisses hinzu, wenn dieses Buch im Bücherverzeichnis noch nicht enthalten ist (liefert true wenn das Hinzufügen erfolgreich ist, ansonsten false). Hinweis: Zwei Bücher gelten als gleich, wenn sie dieselbe isbn haben! Falls das Buch in das Bücherverzeichnisses eingetragen wird, dann soll auch ein Preis festgelegt werden. Der Preis besteht aus einem Grundpreis plus einem Seitenpreis. Der Grundpreis soll zufällig zwischen [10, 30) Euro festgelegt werden. Der Seitenpreis ist abhängig von der Anzahl der Seiten und beträgt 0, 02 Euro/Seite. public ArrayList<Buch> getTeureTaschenbuecher() liefert eine ArrayList mit den im Bücherverzeichnis vorhandenen Taschenbüchern, die mehr als 20 Euro kosten (die Größe der ArrayList soll genau der Anzahl der Taschenbücher entsprechen, die mehr als 20 Euro kosten), public Buch findeErstlingsUndLetztesWerk() liefert das Buch zurück, welches ein Erstlingswerk und das einzige Buch eines Autors ist, d.h. der Autor hat genau ein Buch geschrieben. Gibt es mehrere Bücher, die dieses Kriterium erfüllen, dann kann ein beliebiges Buch zurückgeliefert werden.