Erstellen Sie ein Paket meinMathePaket.zahlen, welches eine Klasse Bruch zum Umgang mit Brüchen enthält, welche mindestens die folgende Funktionalität bereitstellt:
* Initialisierung mit 0
* Initialisierung mit Zähler und Nenner
* Ausgabe des Bruchs in der Form Zähler/Nenner
* Addition, Multiplikation und Division von Brüchen
Leiten Sie von der (Basis-)Klasse Bruch aus Aufgabe 1 eine Klasse GekuerzterBruch ab, welche die gleichen Operationen wie Bruch aufweist, aber nach jeder Operation die entstehende Bruchzahl kürzt. Die Klasse GekuerzterBruch soll ebenfalls im Paket meinMathePaket.zahlen enthalten sein. Überladen Sie dazu in der Klasse GekuerzterBruch die Methoden der Klasse Bruch in geeigneter Art und rufen Sie zur Implementierung der überladenen Methoden die geerbten Methoden
auf. Das Programm...
Alles anzeigen
* Initialisierung mit 0
* Initialisierung mit Zähler und Nenner
* Ausgabe des Bruchs in der Form Zähler/Nenner
* Addition, Multiplikation und Division von Brüchen
Leiten Sie von der (Basis-)Klasse Bruch aus Aufgabe 1 eine Klasse GekuerzterBruch ab, welche die gleichen Operationen wie Bruch aufweist, aber nach jeder Operation die entstehende Bruchzahl kürzt. Die Klasse GekuerzterBruch soll ebenfalls im Paket meinMathePaket.zahlen enthalten sein. Überladen Sie dazu in der Klasse GekuerzterBruch die Methoden der Klasse Bruch in geeigneter Art und rufen Sie zur Implementierung der überladenen Methoden die geerbten Methoden
auf. Das Programm...
Quellcode
- package meinMathePaket.zahlen;
- public class Bruch {
- public int zaehler, nenner;
- /**
- * Konstruktor
- */
- public Bruch() {
- this.zaehler = 0;
- this.nenner = 0;
- }
- /**
- * Konstruktor
- */
- public Bruch(int zaehler, int nenner) {
- this.zaehler = zaehler;
- this.nenner = nenner;
- }
- /**
- * Stringkonvertierung
- */
- public String toString() {
- if(this.nenner == 1)
- return this.zaehler+"";
- return this.zaehler+"/"+this.nenner;
- }
- /**
- * Addition
- */
- Bruch add(Bruch bruch) {
- int nenner=0,xzaehler=0;
- if(this.nenner > bruch.nenner) {
- nenner = this.nenner;
- bruch.zaehler *= this.nenner / bruch.nenner;
- xzaehler = this.zaehler;
- } else {
- nenner = bruch.nenner;
- xzaehler = this.zaehler * bruch.nenner / this.nenner;
- }
- return new Bruch(xzaehler+bruch.zaehler, nenner);
- }
- /**
- * Subtraktion = Addition mit umgekehrtem Vorzeichen
- */
- Bruch subtraktion(Bruch bruch) {
- return this.add(new Bruch(bruch.zaehler*-1, bruch.nenner));
- }
- /**
- * Multiplikation
- */
- Bruch mul(Bruch bruch) {
- return new Bruch(this.zaehler*bruch.zaehler, this.nenner*bruch.nenner);
- }
- /**
- * Division = Multiplikation mit Kehrwert
- */
- Bruch div(Bruch bruch) {
- return this.mul(new Bruch(bruch.nenner, bruch.zaehler));
- }
- /**
- * main
- */
- public static void main(String[] args) {
- GekuerzterBruch a = new GekuerzterBruch(3, 2);
- GekuerzterBruch b = new GekuerzterBruch(10, 4);
- System.out.println("a : " + a);
- System.out.println("b : " + b);
- System.out.println("a+b : " + a.add(b));
- System.out.println("a*b : " + a.mul(b));
- System.out.println("a/b : " + a.div(b));
- }
- }
- class GekuerzterBruch extends Bruch {
- public GekuerzterBruch(int zaehler, int nenner) {
- Bruch test = shorten(new Bruch(zaehler, nenner));
- this.zaehler = test.zaehler;
- this.nenner = test.nenner;
- }
- /**
- * Die folgenden Funktionen nutzen die Original Funktionen und kuerzen die Zahl
- */
- Bruch add(Bruch bruch) {
- return shorten(super.add(bruch));
- }
- Bruch mul(Bruch bruch) {
- return shorten(super.mul(bruch));
- }
- /**
- * Kuerzt einen Bruch
- */
- Bruch shorten(Bruch bruch) {
- int ggt = ggt(bruch.zaehler, bruch.nenner);
- bruch.zaehler /= ggt;
- bruch.nenner /= ggt;
- return new Bruch(bruch.zaehler, bruch.nenner);
- }
- /**
- * groesster, gemeinsamer Teiler
- */
- public static int ggt(int x, int y) {
- if(y != 0)
- return ggt(y, x%y);
- else
- return x;
- }
- }