/**
* Rationale Zahl
*/
public class RationaleZahl {
/**
* Leerer Konstruktor, legt die Zahl 0/0 an
*/
public RationaleZahl() {
// Implementieren sie diese Methode
nenner = 0;
zaehler = 0;
}
/**
* Konstruktor, legt die Zahl i/1 an
*/
public RationaleZahl(int i) {
// Implementieren sie diese Methode
zaehler = i;
nenner = 1;
}
/**
* Konstruktor, legt die Zahl z/n an
*/
public RationaleZahl(int z, int n) {
// Implementieren sie diese Methode
zaehler=z;
nenner=n;
}
/**
* Kopier-Konstruktor, kopiert die Werte other.zaehler und other.nenner.
*/
public RationaleZahl(RationaleZahl other) {
// Implementieren sie diese Methode
other = new RationaleZahl(zaehler, nenner);
}
/**
* Addiert 'other' auf die aktuelle Zahl INPLACE, d.h. der Inhalt der aktuellen Zahl wird veraendert. Der Wert der Zahl 'other' DARF jedoch nicht veraendert werden!
*/
public void add(RationaleZahl other) {
// Implementieren sie diese Methode
int SumZaehler = zaehler*other.nenner+other.zaehler*nenner;
int SumNenner = nenner*other.nenner;
RationaleZahl sum = new RationaleZahl(SumZaehler, SumNenner);
sum.kuerzen();
}
/**
* Addiert die Konstante 'zahl' auf die aktuelle Zahl INPLACE, d.h. der Inhalt der aktuellen Zahl wird veraendert.
*/
public void add(int zahl) {
// Implementieren sie diese Methode
int SumZaehler=zaehler+zahl*nenner;
int SumNenner= nenner;
RationaleZahl sum = new RationaleZahl(SumZaehler, SumNenner);
}
/**
* Subtrahiert 'other' von der aktuelle Zahl INPLACE, d.h. der Inhalt der aktuellen Zahl wird veraendert. Der Wert der Zahl 'other' DARF jedoch nicht veraendert werden!
*/
public void sub(RationaleZahl other) {
// Implementieren sie diese Methode
int SubZaehler = zaehler*other.nenner-other.zaehler*nenner;
int SubNenner = nenner*other.nenner;
RationaleZahl sub = new RationaleZahl(SubZaehler, SubNenner);
sub.kuerzen();
}
/**
* Subtrahiert die Konstante 'zahl' von der aktuelle Zahl INPLACE, d.h. der Inhalt der aktuellen Zahl wird veraendert.
*/
public void sub(int zahl) {
// Implementieren sie diese Methode
int SubZaehler=zaehler-zahl*nenner;
int SubNenner= nenner;
RationaleZahl sub = new RationaleZahl(SubZaehler, SubNenner);
}
/**
* Multipliziert die Rationale Zahl 'other' auf die aktuelle Zahl INPLACE, d.h. der Inhalt der aktuellen Zahl wird veraendert. Der Wert der Zahl 'other' DARF jedoch nicht veraendert werden!
*/
public void mul(RationaleZahl other) {
// Implementieren sie diese Methode
int ProdZaehler = zaehler*other.zaehler;
int ProdNenner = nenner*other.nenner;
RationaleZahl prod = new RationaleZahl(ProdZaehler, ProdNenner);
prod.kuerzen();
}
/**
* Multipliziert aktuelle Zahl mit der Konstante 'zahl' INPLACE, d.h. der Inhalt der aktuellen Zahl wird veraendert.
*/
public void mul(int zahl) {
// Implementieren sie diese Methode
int ProdZaehler = zaehler*zahl;
int ProdNenner = nenner;
RationaleZahl prod = new RationaleZahl(ProdZaehler, ProdNenner);
prod.kuerzen();
}
/**
* Dividiert die aktuelle Zahl durch die Rationalen Zahl 'other' INPLACE, d.h. der Inhalt der aktuellen Zahl wird veraendert. Der Wert der Zahl 'other' DARF jedoch nicht veraendert werden!
*/
public void div(RationaleZahl other) {
// Implementieren sie diese Methode
int QuotZaehler = zaehler*other.nenner;
int QuotNenner = nenner*other.zaehler;
RationaleZahl Quot = new RationaleZahl(QuotZaehler, QuotNenner);
Quot.kuerzen();
}
/**
* Dividiert die aktuelle Zahl durch die Konstante 'zahl' INPLACE, d.h. der Inhalt der aktuellen Zahl wird veraendert.
*/
public void div(int zahl) {
// Implementieren sie diese Methode
int QuotZaehler = zaehler;
int QuotNenner = nenner*zahl;
RationaleZahl Quot = new RationaleZahl(QuotZaehler, QuotNenner);
Quot.kuerzen();
}
/**
* Gibt die Zahl aus
*/
public void printRat() {
System.out.println("(" + zaehler + "/" + nenner + ")");
}
/**
* Konvertiert die Zahl in ein double
*/
public double nachDouble() {
return (double)zaehler/(double)nenner;
}
/**
* Berechnet den groessten gemeinsamen Teiler der Zahlen 'zahl1' und 'zahl2'
*/
public static int ggT(int zahl1, int zahl2) {
// Implementieren sie diese Methode
if(zahl1==zahl2)
return zahl1;
else if(zahl1<zahl2)
return ggT(zahl1, zahl2-zahl1);
else
return ggT(zahl1-zahl2, zahl2);
}
/**
* Berechnet das kleinste gemeinsame Vielfache der Zahlen 'zahl1' und 'zahl2'
*/
public static int kgV(int zahl1, int zahl2) {
// Implementieren sie diese Methode
while(zahl1 != zahl2){
if(zahl1<zahl2){
zahl1 += zahl1;
}
else{
zahl2 += zahl2;
}
}
return zahl1;
}
/**
* Kuerzt die aktuelle Zahl, muss in den relevanten Rechenoperationen aufgerufen werden!
*/
private void kuerzen() {
// Implementieren sie diese Methode
int x = ggT(nenner, zaehler);
int KueZaehler = zaehler/x;
int KueNenner = nenner/x;
RationaleZahl kue = new RationaleZahl(KueZaehler, KueNenner);
}
private int zaehler;
private int nenner;
}