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;
    }
    

Anmelden zum Antworten