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
d
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.
5
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.
#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;
}
Comments
Leave a comment