Aufgabe 1: Bruchrechnung

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