Exkurs: Bruchrechnung


In diesem Exkurs wollen wir ein Programm zur Bruchrechnung schreiben. Dazu werden wir zwei Klassen Bruch und Rechnung implementieren. Die Klasse Bruch stellt elementare Operationen zum Umgang mit Brüchen zur Verfügung, und die Klasse Rechnung führt dann arithmetische Operationen mit diesen Brüchen aus.

Schritt 1

Erstellen Sie eine neue Projektdatei "Bruchrechnung" mit einer Klasse Bruch. Statten Sie die Klasse mit den private-Attributen zaehler und nenner (beide vom Typ int) aus und erzeugen Sie zwei Methoden: Den Konstruktor bruch(int z, int n) sowie eine Methode anzeigen(), welche mittels System.out.println() den Zähler und den Nenner anzeigt.

Gastbeitrag von Martin Helmich:
Projekte dokumentieren

Schritt 2

Ergänzen Sie die Klasse um zwei abfragende Methoden int gibZaehler() und int gibNenner(). Testen Sie nun alle vier Methoden, indem Sie die Klasse kompilieren und ein Objekt bruch1 dieser Klasse erzeugen.

Schritt 3 / Übung 1 (1 Punkt)

Statten Sie die Klasse Bruch mit einer Methode erweitern(int n) aus, welche sowohl den Zähler wie auch den Nenner mit der Zahl n multipliziert.

Schritt 4 / Übung 2 (4 Punkte)

Schreiben Sie eine Funktion int ggt(), welche den größten gemeinsamen Teiler von Nenner und Zähler berechnet. Beispiel: Der ggT von 12 und 15 ist 3. Das Ergebnis von ggt() wird für die nächste Methode in Übung 6.3 benötigt.

Auf der Seite Euklidischer Algorithmus ist genau erklärt, wie man den ggT zweier Zahlen berechnen kann.

Euklidischer Algorithmus

Schritt 5 / Übung 3 (2 Punkte)

Schreiben Sie eine Methode kuerzen(), welche den Bruch so weit wie möglich kürzt. Aus dem Bruch 120/130 soll zum Beispiel 12/13 werden, aus dem Bruch 16/20 der Bruch 4/5.

Sie kürzen einen Bruch, indem Sie sowohl Zähler wie auch Nenner durch den ggT von Nenner und Zähler dividieren.

Schritt 6

Erzeugen Sie die Klasse Rechnung mit den drei Attributen a, b und ergebnis vom Typ Bruch. Es handelt sich also um eine typische Hat-Beziehung zwischen zwei Klassen.

Der Konstruktur Rechnung() soll so aufgebaut sein:

public Rechnung(Bruch a, Bruch b)
{
   this.a = a;
   this.b = b;
}
Hier wird der this-Operator verwendet. Die beiden Parameter der Methode Rechnung() haben den gleichen Namen wie die beiden Attribute, nämlich a und b. In manchen Programmiersprachen wäre so etwas gar nicht möglich; Pascal oder Delphi würden hier z.B. einen "duplicate identifier" - Fehler melden. In Java-Klassen kann man für Attribute und Parameter den gleichen Namen verwenden, muss dann aber den Attributen den this-Operator voranstellen. Jetzt kann das laufende Programm eindeutig entscheiden, welches "a" ein Attribut ist (nämlich this.a), und welches "a" der Parameter ist.

Mit dem this-Operator kann man Attribute der Klasse eindeutig kennzeichnen und sie so von Parametern gleichen Namens unterscheiden.

Übung 4 (3 Punkte)

Zeichnen Sie ein Objektdiagramm, das ein Objekt rechnung1 der Klasse Rechnung darstellt, welches drei Bruch-Objekte a, b und ergebnis als Attribute besitzt. Der Bruch a soll den Wert 3/4, der Bruch b den Wert 2/5 haben. Das Objektdiagramm soll den Zustand der Objekte nach dem Ausführen der Multiplikation ergebnis = a * b zeigen.

Klassen- und Objektdiagramme

Schritt 7 / Übung 5 (2 Punkte)

Ergänzen Sie die Klasse Rechnung um eine Methode anzeigen(), welche die drei Brüche a, b und ergebnis in der Konsole anzeigt. Die Methode soll dabei auf die anzeigen()-Methoden der Bruch-Objekte zurückgreifen.

Schritt 8 / Übung 6 (3 Punkte)

Schreiben Sie eine Methode multiplizieren(), welche die beiden Brüche a und b miteinander multipliziert und das Ergebnis in ergebnis speichert.

Schritt 9 / Übung 7 (4 Punkte)

Schreiben Sie eine Methode addieren(), welche die beiden Brüche a und b miteinander addiert und das Ergebnis in ergebnis speichert.

Schritt 10 / Übung 8 (2 Punkte)

Schreiben Sie zwei Methode subtrahieren() und dividieren(). Achten Sie darauf, den Quelltext dieser beiden Methoden möglichst kurz zu halten. Wenn man geschickt ist, kann man subtrahieren() mit zwei Zeilen erledigen!

Diese HTML-Seite wurde erstellt von Ulrich Helmich am 20. Februar 2005 mit Golive 6.






IMPRESSUM