Mon exigence est d'ajouter, multiplier, soustraire et diviser des fractions rationnelles en utilisant des classes puis implémenter une fonction autonome (non-classe) void printRationalAsFloating(const Rational &r) en utilisant la fonction friend pour imprimer les nombres Rational passés en nombres à virgule flottante. Ma sortie est correcte avec multiplication mais avec addition est incorrecte. Je ne sais pas si quelque chose ne va pas avec friend function ou avec printRationalAsFloating.

Ma sortie:

Testing addition : 1/2 * 1/2 = 4/4
Rational as floating:1                //it should be something like 1.00
Testing multiplication : 1/2 * 1/2 = 1/4
Rational as floating:0.25

Int main();

cout<<"Testing addition : ";
                    n1 = n2.addition(n3);
                    n2.printRational();
                    cout <<" + ";
                    n3.printRational();
                    cout <<" = ";
                    n1.printRational();
                    cout << endl;
                    cout << "Rational as floating:";
                    printRationalAsFloating(n1);
                    cout << endl;
                    Rational n1;
                    Rational n2(1,2);
                    Rational n3(n2);
                    cout<<"Testing multiplication : ";
                    n1 = n2.multiplication(n3);
                    n2.printRational();
                    cout <<" * ";
                    n3.printRational();
                    cout <<" = ";
                    n1.printRational();
                    cout << endl;
                    cout << "Rational as floating:";
                    printRationalAsFloating(n1);
                    cout << "  ";

En tête de fichier:

using namespace std;

class Rational {

  public:
    Rational();        // default constructor
    Rational(int, int); //std (initialisation) constructor
    Rational(const Rational&); //copy constructor
    Rational multiplication(const Rational &);
    Rational addition(const Rational &);
    friend void printRationalAsFloating(const Rational &);
    void printRational();
  private:
   int numerator;
   int denominator;
};

Voici mon codage:

void printRationalAsFloating(const Rational &r)
{
    float numerator,n;
    float denominator;
    if (r.denominator==0) 
    {
        string exceptionString = "\n\nError: 'Cannot divide by zero'.\n";
        throw exceptionString;
        cout << "ERROR: ATTEMPTING TO DIVIDE BY ZERO" << endl;
        exit(0); // will terminate the program if division by 0 is attempted
    }
    n = r.numerator / r.denominator;

    cout << n ;

}  

using namespace std;
//addition
Rational Rational::addition(const Rational &a)
{ 
      return Rational(numerator * a.denominator + a.numerator * denominator, 
      denominator * a.denominator);
}
//multiplication
Rational Rational::multiplication(const Rational &a)
{ 
   return Rational((numerator * a.numerator) ,denominator * a.denominator);
}

//display fraction
void Rational::printRational()
{
    cout << numerator << "/" << denominator ;
}

J'ai essayé de le rendre concis, mais si vous avez encore besoin de code supplémentaire, veuillez commenter ci-dessous et j'en téléchargerai plus pour votre facilité. Merci

2
muzzi 23 mai 2018 à 13:44

3 réponses

Meilleure réponse
void printRationalAsFloating(const Rational &r)
{
float numerator,n,denominator;
if (r.denominator==0) 
    {
        string exceptionString = "\n\nError: 'The denominator of a rational cannot     be zero'.\n";
        throw exceptionString;
        //cout << "ERROR: ATTEMPTING TO DIVIDE BY ZERO" << endl;
        //exit(0); // will terminate the program if division by 0 is attempted
    }
n = (float)r.numerator / r.denominator;

cout << n ;

}
0
muzzi 7 août 2018 à 05:34

Cette:

n = r.numerator / r.denominator;

Invoque la division entière .

Essayez de caster au moins un opérande en double, comme ceci:

n = r.numerator / (double) r.denominator;
2
gsamaras 23 mai 2018 à 10:49

Vous divisez un int par et int. Cela donne un int casté plus tard sur float. Commencez par convertir votre int en float

float n = r.numerator / (float)r.denominator;
1
JRR 23 mai 2018 à 10:56