Answer to Question #168029 in C++ for Anis Zaman

Question #168029

Create a class RationalNumber that stores a fraction in its original form (i.e. without finding the 

equivalent floating pointing result). This class models a fraction by using two data members: an integer 

for numerator and an integer for denominator. For this class, provide the following functions: 

a) A no-argument constructor that initializes the numerator and denominator of a fraction to 

some fixed values. 

b) A two-argument constructor that initializes the numerator and denominator to the values sent 

from calling function. This constructor should prevent a O denominator in a fraction, reduce or 

simplify fractions that are not in reduced form, and avoid negative denominators. 


c) A showRNt) function to display a fraction in the format a/b. 

d) Provide the following operator functions as non-member friend functions. 

i. An overloaded operator + for addition of two rational numbers. 


Two fractions a/b and c/d are added together as: 

£ + £ _ (a*d)+(b*c) 

b d b “ d 

ii. An overloaded operator - for subtraction of two rational numbers. 

Two fractions a/b and c/d are subtracted from each other as: 

£_£=W 

b d b * d 

iii. An overloaded operator * for subtraction of two rational numbers. 

Two fractions a/b and CM are multiplied together as: 

a * c _ a * c 

b d_b*d 

iv. An overloaded operator / for division of two rational numbers. 

If fraction a/b is divided by the fraction c/d, the result is 

i _ a * d 

b / fi b * c 

v. Overloaded relational operators 

a.operator >: should return a variable of type bool to indicate whether 1" fraction 

is greater than 2"‘1 or not. 

b.0perator <: should return a variable of type bool to indicate whether 1" fraction 

is smaller than 2"“ or not. 

c.0perator >=: should return a variable of type bool to indicate whether 1St 

fraction is greater than or equal to 2"d or not. 

d.operator <=z should return a variable of type bool to indicate whether 1“ 

fraction is smaller than or equal to 2"d or not. 




Testing: 


vi. Overloaded equality operators for RationalNumber class 

a.operator==: should return a variable of type bool to indicate whether 1“ 

fraction is equal to the 2"d fraction or not. 

b.0peratorl=: should a true value if both the fractions are not equal and return a 

false if both are equal. 


1
Expert's answer
2021-03-02T04:54:45-0500
#include <iostream>
#include <algorithm>
using namespace std;
class RationalNumber{
    public:
    int numerator, denominator;
    RationalNumber(){
        this->numerator = 0;
        this->denominator = 1;
    }
    RationalNumber(int num, int den){
        if(den>0 && num >= 0){
            int gcd = __gcd(num, den);
            if(gcd != 0){
                this->numerator = num / gcd;
                this->denominator = den / gcd;
            }
        }
        else cout<<"Negative and non zero denominators not allowed!\n";
    }
    void showRNt(){
        cout<<this->numerator;
        if(this->denominator != 1)
            cout<<"/"<<this->denominator;
    }
    friend RationalNumber operator+(const RationalNumber&, const RationalNumber&);
    friend RationalNumber operator-(const RationalNumber&, const RationalNumber&);
    friend RationalNumber operator*(const RationalNumber&, const RationalNumber&);
    friend RationalNumber operator/(const RationalNumber&, const RationalNumber&);
    friend bool operator<(const RationalNumber&, const RationalNumber&);
    friend bool operator>(const RationalNumber&, const RationalNumber&);
    friend bool operator<=(const RationalNumber&, const RationalNumber&);
    friend bool operator>=(const RationalNumber&, const RationalNumber&);
    friend bool operator==(const RationalNumber&, const RationalNumber&);
    friend bool operator!=(const RationalNumber&, const RationalNumber&);
};
RationalNumber operator+(const RationalNumber& a, const RationalNumber& b){
    return RationalNumber(a.numerator * b.denominator + a.denominator * b.numerator, a.denominator * b.denominator);
}
RationalNumber operator-(const RationalNumber& a, const RationalNumber& b){
    return RationalNumber(a.numerator * b.denominator - a.denominator * b.numerator, a.denominator * b.denominator);
}
RationalNumber operator*(const RationalNumber& a, const RationalNumber& b){
    return RationalNumber(a.numerator * b.numerator, a.denominator * b.denominator);
}
RationalNumber operator/(const RationalNumber& a, const RationalNumber& b){
    return RationalNumber(a.numerator * b.denominator, a.denominator * b.numerator);
}
bool operator<(const RationalNumber& a, const RationalNumber& b){
    return a.numerator/a.denominator < b.numerator / b.denominator;
}
bool operator>(const RationalNumber& a, const RationalNumber& b){
    return a.numerator/a.denominator > b.numerator / b.denominator;
}
bool operator<=(const RationalNumber& a, const RationalNumber& b){
    return a.numerator/a.denominator <= b.numerator / b.denominator;
}
bool operator>=(const RationalNumber& a, const RationalNumber& b){
    return a.numerator/a.denominator >= b.numerator / b.denominator;
}
bool operator==(const RationalNumber& a, const RationalNumber& b){
    return a.numerator/a.denominator == b.numerator / b.denominator;
}
bool operator!=(const RationalNumber& a, const RationalNumber& b){
    return a.numerator/a.denominator != b.numerator / b.denominator;
}

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!

Leave a comment