Operatorfunktion



  • Ich versuche mich momentan an Operatorfunktionen. Doch leider habe ich ein kleines Verständnisproblem bei einer der Musterlösungen...
    Hier erst einmal der Code:

    #include <iostream>
    using namespace std;
    
    class rational
    {
    private:
        int z;
        int n;
        int ggT(int a, int b);
    
    public:
        rational(){z=0; n=1;};
        rational(int p, int q)
        {z=p; n=q; this->simplify();}
        void simplify();             //Kürzt den Burch so weit wie möglich
        bool operator==(rational rat); //Vergleichsoperator
        void print();
    
    };
    
    int rational::ggT(int a, int b) //Größten gemeinsamen Teiler finden
    {
        if(a==b) return a;
       else
       {
        if(a>b) return (ggT(a-b,b));
    
        else return (ggT(b-a,a));
       }
    
    }
    void rational::simplify()  //Kürzt den Bruch so weit wie möglich
    {
        int ggt=ggT(z,n);
    
        z=z/ggt;
        n=n/ggt;
    }
    
    void rational::print()
    {
        cout <<z<<"/"<<n<<endl;
    }
    
    int main(void)
    {
        rational A(10,4);
        A.print();
    }
    

    meine Frage wäre was genau in der Methode int rational::ggT(int a, int b) geschieht. Irgendwie wird ja zunächst der ggT gesucht aber gerade den Teil if(a>b) return (ggT(a-b,b)verstehe ich leider nicht. Wieso wird der Wert b von a abgezogen??

    Besten Dank schonmal 🙂

    Mod-Edit: Code-Tags


  • Mod

    kiwiiii schrieb:

    Wieso wird der Wert b von a abgezogen??

    Wissen wir auch nicht so genau. Für gewöhnlich berechnet man gleich den Rest bei Division.
    ggT(1000000,1) wird sonst zum Trauerspiel...

    https://de.wikipedia.org/wiki/Euklidischer_Algorithmus



  • Ab C++17 könntest du auch auf std::gcd zurückgreifen statt den "alten" Euklid selber zu implementieren.

    Edit: Warum ist ggT überhaupt eine Member-Funktion von rational? Ergibt für mich wenig Sinn.



  • @camper Dane für den Link, hat mir grade einiges erklärt 🙂

    @wob wenn ich das wüsste hätte ich hier keinen Beitrag verfasst 😃


Anmelden zum Antworten