// Copykonstruktor: erzeugt neue Instanz auf Basis einer // übergebenen Bruchinstanz // Hier mit obigem Customkonstruktor verkettet public Bruch(Bruch aBruch) : this(aBruch.numerator, aBruch.denominator) { // Ohne Verkettung müssten hier die Werte gesetzt werden: // this.numerator = aBruch.numerator; // this.denominator = aBruch.denominator; }
// Division dieses durch einen anderen Bruch // Verfahren: Multiplikation mit dem Kehrwert, da andernfalls bei // Ganzzahlen Problem der Ganzzahldivision auftritt! // Ändert den Wert dieses Bruchs public void divide(Bruch aBruch) { this.numerator *= aBruch.denominator; this.denominator *= aBruch.numerator; }
// Division einer Zahl durch einen Bruch // Liefert das Ergebnis als neuen Bruch zurück public static Bruch divide(int aZahl, Bruch aBruch) { // Aufruf obiger Klassenmethode unter // Verwendung von aZahl als Bruch: return(Bruch.divide(new Bruch(aZahl), aBruch)); }
// Multiplikation einer Zahl und eines Bruchs // Liefert das Ergebnis als neuen Bruch zurück public static Bruch multiply(int aZahl, Bruch aBruch) { // Verwendung obiger Klassenmethode möglich, // da aBruch * aZahl = aZahl * aBruch ist: return(Bruch.multiply(aBruch, aZahl)); }
// Subtraktion eines Bruchs von dieser Bruchinstanz // Der Wert dieser Bruchinstanz wird geändert public void subtract(Bruch aBruch) { this.numerator = this.numerator * aBruch.denominator - this.denominator * aBruch.numerator; this.denominator = this.denominator * aBruch.denominator; }
// Multiplikation dieses mit einem anderen Bruch // Ändert den Wert dieses Bruchs public void multiply(Bruch aBruch) { this.numerator *= aBruch.numerator; this.denominator *= aBruch.denominator; }
// Addition einer Zahl und eines Bruchs // Liefert das Ergebnis als neuen Bruch zurück public static Bruch add(int aZahl, Bruch aBruch) { // Verwendung obiger Klassenmethode, da aBruch + aZahl // dasselbe Ergebnis liefert wie aZahl + aBruch: return(Bruch.add(aBruch, aZahl)); }
// Addition eines Bruch zu dieser Bruchinstanz // Der Wert dieser Bruchinstanz wird geändert public void add(Bruch aBruch) { this.numerator = this.numerator * aBruch.denominator + this.denominator * aBruch.numerator; this.denominator = this.denominator * aBruch.denominator; }
// Überladen des Operators / // Ist unmittelbar zurückzuführen auf die Klassenmethode divide public static Bruch operator /(Bruch a, Bruch b) { return(Bruch.divide(a, b)); }
// Überladen des Operators * // Ist unmittelbar zurückzuführen auf die Klassenmethode multiply public static Bruch operator *(Bruch a, Bruch b) { return(Bruch.multiply(a, b)); }