Wie zu reduzieren/vereinfachen Fraktionen komplett (C++)

Kann ich nicht für das Leben von mir zu ergründen warum ich bin immer unendlich vielen Werte zurück, wenn ich Eingabe einen normalen Bruch in den code ein. Alles, aber der GCD (Greatest common divisor) scheint zu funktionieren.

Gibt es eine eklatant offensichtliche Logik Fehler irgendwo in dieser?

Ich habe meine Forschung getan und fand verschiedene Antworten auf die Frage, ich meine, die Wikipedia GIBT IHNEN auch code, es zu tun, aber ich würde gerne herausfinden, wie es funktioniert die Art und Weise habe ich codiert es so, wie es jetzt ist.

#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <math.h>

using namespace std;

class Fraction
{
private:
   double num;
   double den;
   double fraction;
   double temp;
public:
   void setNum();
   void setDen();
   int getNum();
   int getDen();
   void lcdOutput();
   void decOutput();
   int gcd();
};

void Fraction::setNum(){
   cout << "Enter a value for your numerator: " << endl;
   cin >> num;
}

void Fraction::setDen(){
    cout << "Enter a value for your denominator: " << endl;
    cin >> den;
}

int Fraction::getNum(){
    return num;
 }

 int Fraction::getDen(){
     return den;
  }

int Fraction::gcd(){

    Fraction set;
    if(num > den){
       if(fmod(num, den) == 0){
          den = temp;
          return temp;
       }
       else{
          den = fmod(num, den);
          set.gcd();
       }
    }
    else{
       if(fmod(den, num) == 0){
          num = temp;
          return temp;
       }
       else{
          num = fmod(den, num);
          set.gcd();
       }
    }
 }

void Fraction::lcdOutput(){
    Fraction set;
    set.gcd();
    num = num / temp;
    den = den / temp;
    cout << "Fraction in lowest terms: " << num << "/" << den << endl;
}

void Fraction::decOutput(){
   double decimal = num / den;
   cout.precision(4);
   cout << "The fraction in decimal form is: " << decimal << endl;
}

int main(){

    Fraction set;

    set.setNum();
    set.setDen();
    set.getNum();
    set.getDen();
    set.lcdOutput();
    set.decOutput();

return 0;
}
  • Wo ist der Konstruktor für die Fraktion? Ich sehe nicht, wie "temp" zugewiesen wird.
  • Verwenden Sie temp ohne jemals zuweisen einen Wert.
  • Der gcd () - Funktion sieht falsch aus. Warum ist es das erstellen einer neuen Fraktion? Auch sind nicht alle code-Pfade, die eigentlich einen Wert zurückgeben.
  • Sie Fragen: "ist es eine offensichtliche Logik-Fehler', die Antwort 'mehrere'. Der nicht initialisierte variable temp. Die falsche Verwendung der set variable zum erstellen einer Schleife. Es ist schwer zu verstehen, warum Sie denken, dass dieser code richtig ist.
  • Was konntest du beobachten, wenn den debugger?
InformationsquelleAutor Enzo Nutile | 2013-03-15
Schreibe einen Kommentar