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
-
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...
-
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