Prof. Dr. Jürgen Richter Fachbereich E&I Labor Angewandte Informatik Praktikum Objektorientierte Programmierung Aufgabe 1: Bruchrechnung Entwerfen Sie eine Klasse Bruch, mit deren Hilfe die folgenden Rechenoperationen auf Brüchen (rationalen Zahlen) durchgeführt werden können: • • • • Addition Subtraktion Multiplikation Division Der Konstruktor der Klasse Bruch bekommt als Parameter die Werte für den Zähler und den Nenner übergeben. Die Verrechnung der Werte soll wie folgt geschehen: Bruch bruch1 = new Bruch(2,3); Bruch bruch2 = new Bruch(5,2); Bruch bruch3 = bruch1.addition(bruch2); Hinweise: Beachten Sie, dass die Brüche für die Ausgabe gekürzt werden müssen! Es sollen keine gemischten Brüche ausgegeben werden. Schreiben Sie zum Kürzen der Brüche eine Funktion kürzen(). Schreiben Sie außerdem eine Methode ggT(Zahl1, Zahl2), welche den größten gemeinsamen Teiler zweier übergebener Zahlen bestimmt. Sinnvoller ist es, wenn Sie die Klasse GGT aus Versuch 1/2 in ihr Projekt einbinden und die statische Funktion ggT(Zahl1, Zahl2) benutzen (Wiederverwertbarkeit von Klassen). Der ggT ist beim Kürzen der Brüche hilfreich. Überlagern Sie die Methode toString()! Bei negativen Brüchen, immer den Wert des Zählers negativ halten (Konvention). Erstellen Sie zunächst ein Klassendiagramm! Das Test-Programm liest zunächst zwei Brüche ein. Dabei wird in der Reihenfolge 1. Zähler, 2. Nenner eingelesen. Anschließend fragt das Programm den Benutzer, welche der vier Rechenoperationen mit den beiden eingegebenen Brüchen durchgeführt werden soll. Mit einem Programmstart sollen mehrere Berechnungen durchgeführt werden können. Die Dateien sind im Projekt Versuch4 abzulegen. Praktikum OOP [1] Versuch 4 Prof. Dr. Jürgen Richter Fachbereich E&I Labor Angewandte Informatik Praktikum Objektorientierte Programmierung Testdaten für das Rechnen mit Brüchen 3/4 + 7/8 = 13 / 8 = 1 5 /8 1/2 + 1/6 = 2 /3 4/9 * 3/8 = 1/6 -4/9 : 1/3 = -4/3 = - 1 1/3 -4/9 : 2/-3 = 2/3 (Hinweis: 13 / 8 = 1 und 13%8 = 5) -4/9 - -10/18 = 1/9 3 / 4 * -4/3 = -1 4 / -9 - -10/18= 1/9 -4/9 - 10/18 = -1 -4/9 * 3 / 1 = -4/3 = - 1 1/3 Aufgabe 2: PI-Ermittlung über Leibniz-Reihe Ermitteln Sie eine Näherungslösung für PI indem Sie die Leibniz-Reihe verwenden. Diese hat die folgende Form: ∞ (−1)𝑘 1 1 1 1 𝜋 =1− + − + −⋯= � 3 5 7 9 4 2𝑘 + 1 𝑘=0 Verwenden Sie für die Berechnung ausschließlich Objekte der Klasse Bruch! Lagern Sie die Berechnung in eine Klasse Mathefunktionen aus. Bei der Berechnung kann ein Faktor die Anzahl Folgenelemente angeben (z.B. k = 50). Was fällt Ihnen bei der Berechnung der Reihe auf? Praktikum OOP [2] Versuch 4 Prof. Dr. Jürgen Richter Fachbereich E&I Labor Angewandte Informatik Praktikum Objektorientierte Programmierung Aufgabe 3: Stoppuhr Für die nächste Aufgabe benötigen Sie einen Mechanismus um die Laufzeit von Programmteilen zu ermittelt. Dazu erstellen Sie eine Klasse Stoppuhr. Diese soll u.a. die Methoden start, stop und reset beinhalten sowie ein (privates) Attribut, das die gestoppte Zeit speichert. Verwenden Sie dazu die Java-Methode System.currentTimeMillis(); Orientieren Sie sich an der Zählerklasse (Counter) der Vorlesung! Aufgabe 4: Newton-Verfahren zur Berechnung von quadratischen Wurzeln Schreiben Sie eine statische Methode, welche die Quadratwurzel von positiven ganzen Zahlen zieht. Die Berechnung soll über das Newton-Verfahren erfolgen. Die Iterationsformel für das Newton-Verfahren lautet wie folgt: 𝑥𝑛+1 ∶= 𝑥𝑛 − 𝑥𝑛2 − 𝑎 1 𝑎 = �𝑥𝑛 + � 2𝑥𝑛 2 𝑥𝑛 Dabei ist a der Wert, für den die Wurzel gezogen werden soll und x0 ist ein Startwert (z.B. x0=a). Die Formel wird solange iterativ erneut berechnet, bis ein bestimmter Genauigkeitsfaktor unterschritten wird (z.B. 0,0001). Der folgende Codeauszug stellt eine Hilfestellung für das Abbruchkriterium dar. while(Math.abs(xn – a / xn) > genauigkeit * xn) { //ToDo } Nutzen Sie nun die in Aufgabe 3 erstellte Stoppuhr, um die Zeit zu ermitteln, die Ihre Methode für das Ziehen der Wurzel aus einer beliebigen Zahl benötigt. Vergleichen Sie diese mit der Zeit, die die Methode aus der Java Math-Bibliothek benötigt. Praktikum OOP [3] Versuch 4
© Copyright 2024 ExpyDoc