Kürzen von Brüchen
-
Hallo Gemeinde,
es gibt zwar einige Infos zum Thema kürzen von Brüchen, jedoch halfen mir die Ansätze nicht wirklich.
Ich habe folgenden Code entwickelt:class bruch { friend class ostream ; // zum überladen des Ausgabeoperators friend bruch operator * (bruch&,bruch&); // zum Überladen des Mal-Operators public: void get_z(); // Zähler eingeben void get_n(); // Nenner eingeben int put_z(); // Zähler rückgeben int put_n(); // Nenner rückgeben private: int z; // Im Private-Bereich nur initialisieren int n; }; bruch operator * (bruch&x, bruch&y) // Rechnung Bruch 1 * Bruch 2 (überladener Operator*) { bruch temp; temp.z = (x.put_z() * y.put_z()); temp.n = (x.put_n() * y.put_n()); return temp; }; ostream& operator<<(ostream& ausgabe, bruch&zahl) // Funktion zum Überladen des Ausgabeoperators { ausgabe << zahl.put_z() <<"/"<< zahl.put_n(); return ausgabe; }; void bruch:: get_z() // Funktion Zähler eingeben { cout<<"Bitte geben Sie den Zaehler ein:\n"; cin>>z; }; void bruch::get_n() // Funktion Nenner eingeben { cout<<"Bitte geben Sie den Nenner ein:\n"; cin>>n; }; int bruch:: put_z() // Funktion Zählerrückgabe (ACHTUNG INT) { return z; }; int bruch::put_n() // Funktion Nennerrückgabe (ACHTUNG INT) { return n; }; void main() { bruch a,b,e; a.get_z(); // Zähler Bruch A a.get_n(); // Nenner Bruch A b.get_z(); // Zähler Bruch B b.get_n(); // Nenner Bruch B e=a*b; cout<<e.put_z() <<"/"<<e.put_n()<<"\n"; // Ausgabe der Multiplikation }
Was muß ich nun tuen, um das Endergebnis zu kürzen?
-
Du ermittelst den größten gemeinsamen Teiler von Zähler und Nenner und teilst durch den ermittelten Wert. Hier eine Funktion für den ggt:
int ggt(int a, int b) { if(a < 0) //Das kannst du dir bei unsigned Werten sparen a = -a; if(b < 0) b = -b; while(true) { if(a == 0) return b; b %= a; if(b == 0) return a; a %= b; } return 1; }