I need to be able to do this Rational r1 = 1; cout << (r1 == 1); // prints true
ID: 3863163 • Letter: I
Question
I need to be able to do this
Rational r1 = 1;
cout << (r1 == 1); // prints true
cout << (2 == r1); // prints false
cout << (r1 < 2); // prints true
cout << (0 < r1); // prints false
cout << (r1 + 2); // prints 3/1 (or just 3)
To do this, you must provide overloads of all operators that take an int as one of the arguments, and a Rational as the other. This will increase the size of your program considerable.
So far i have
Rational Rational::operator+(const Rational &r, int s)const
{
Rational t;
t.numerator = r.numerator * denominator;
t.numerator += r.denominator * numerator;
t.denominator = r.denominator * denominator;
return t;}
Im not sure how incorporate the int. I have a constructor that accepts an int and gives a rational number (Rational(int)). im also getting an error saying it can accept zero or 1. I also have to write the function for ==, !=, <. <=, >, >=. +,-,*,/. I have access to a gcd and a lcm function aswell. The other functions as i have them are
// 1. Comparing two rational numbers for equality:
// - r1 == t2
bool Rational::operator==(const Rational &r, int s) const
{
Rational(s); // use this to create the int to a rational number with num and denom
return (r.numerator * denominator == r.denominator*numerator);
}
// - r1 != r2
bool Rational::operator!=(const Rational &r, int s) const
{
Rational(s); // use this to create the int to a rational number with num and denom
return !(r.numerator * denominator == r.denominator*numerator);
}
// 2. Ordering rational numbers
// - r1 < r2
bool Rational::operator<(const Rational &r, int s) const
{
int num1 = numerator * r.denominator;
int num2 = denominator * r.numerator;
return(num1 < num2);
}
// - r1 > r2
bool Rational::operator>(const Rational &r, int s) const
{
int num1 = numerator * r.denominator;
int num2 = denominator * r.numerator;
return(num1 > num2);
}
// - r1 <= r2
bool Rational::operator<=(const Rational &r, int s) const
{
int num1 = numerator * r.denominator;
int num2 = denominator * r.numerator;
return(num1 <= num2);
}
// - r1 >= r2
bool Rational::operator>=(const Rational &r, int s) const
{
int num1 = numerator * r.denominator;
int num2 = denominator * r.numerator;
return(num1 >= num2);
}
// 3. The standard arithmetic operators
// - r1 + r2
// purpose: add two rational numbers
Rational Rational::operator+(const Rational &r, int s)const
{
Rational t;
t.numerator = r.numerator * denominator;
t.numerator += r.denominator * numerator;
t.denominator = r.denominator * denominator;
return t;
}
// - r1 - r2
//purpose: subtract two rational numbers
Rational Rational::operator-(const Rational &r, int s)const
{
Rational t;
t.numerator = r.denominator * numerator;
t.numerator -= denominator * r.numerator;
t.denominator = r.denominator * denominator;
return t;
}
// - r1 * r2
// purpose: multiply two rational numbers
Rational Rational::operator*(const Rational &r, int s)const
{
Rational t;
t.numerator = r.numerator * numerator;
t.denominator = r.denominator * denominator;
return t;
}
// - r1 / r2
Rational Rational::operator/(const Rational &r, int s)const
{
Rational t;
t.numerator = r.denominator * numerator;
t.denominator = denominator * r.numerator;
return t;
}
Explanation / Answer
#include<iostream>
using namespace std;
class Rational
{
private:
int numerator, denominator;
public:
Rational(int i)
{
numerator = i;
denominator = 1;
}
Rational(int i, int j)
{
numerator = i;
while(j == 0)
{
cout<<" Denominator can not be equals to zero ";
cin>>j;
}
denominator = j;
}
void print();
Rational operator+(int);
Rational operator+(const Rational &);
Rational operator-(int);
Rational operator-(const Rational &);
Rational operator*(int);
Rational operator*(const Rational &);
Rational operator/(int);
Rational operator/(const Rational &);
friend bool operator==(const Rational, int);
bool operator==(const Rational &);
friend bool operator==(int, const Rational);
friend bool operator<(const Rational, int);
bool operator<(const Rational &);
friend bool operator<(int, const Rational);
};
bool Rational::operator<(const Rational &r1)
{
int num1 = numerator * r1.denominator;
int num2 = denominator * r1.numerator;
return(num1 < num2);
}
bool operator<(const Rational r1, int i)
{
Rational t = i;
int num1 = t.numerator * r1.denominator;
int num2 = t.denominator * r1.numerator;
return(num1 < num2);
}
bool operator<(int i, const Rational r1)
{
Rational t = i;
int num1 = t.numerator * r1.denominator;
int num2 = t.denominator * r1.numerator;
return(num1 < num2);
}
bool operator==(int i, const Rational r1)
{
Rational t = i;
return (r1.numerator == t.numerator && r1.denominator == t.denominator);
}
bool operator==(const Rational r1, int i)
{
Rational t = i;
return (r1.numerator == t.numerator && r1.denominator == t.denominator);
}
bool Rational::operator==(const Rational &r1)
{
return (r1.numerator == numerator && r1.denominator == denominator);
}
Rational Rational::operator/(const Rational &r1)
{
Rational t = r1;
t.numerator *= denominator;
t.denominator *= numerator;
cout<<t.numerator<<"/"<<t.denominator<<endl;
return t;
}
Rational Rational::operator/(int i)
{
Rational t = i;
t.numerator *= denominator;
t.denominator *= numerator;
cout<<t.numerator<<"/"<<t.denominator<<endl;
return t;
}
Rational Rational::operator*(const Rational &r1)
{
Rational t = r1;
t.numerator *= numerator;
t.denominator *= denominator;
cout<<t.numerator<<"/"<<t.denominator<<endl;
return t;
}
Rational Rational::operator*(int i)
{
Rational t = i;
t.numerator *= numerator;
t.denominator *= denominator;
cout<<t.numerator<<"/"<<t.denominator<<endl;
return t;
}
Rational Rational::operator-(const Rational &r1)
{
Rational t = r1;
t.numerator = numerator * t.denominator - t.numerator * denominator;
t.denominator = t.denominator * denominator;
cout<<t.numerator<<"/"<<t.denominator<<endl;
return t;
}
Rational Rational::operator-(int i)
{
Rational t = i;
t.numerator = numerator * t.denominator - t.numerator * denominator;
t.denominator = t.denominator * denominator;
cout<<t.numerator<<"/"<<t.denominator<<endl;
return t;
}
Rational Rational::operator+(int i)
{
Rational t = i;
t.numerator = numerator * t.denominator + t.numerator * denominator;
t.denominator = t.denominator * denominator;
cout<<t.numerator<<"/"<<t.denominator<<endl;
return t;
}
Rational Rational::operator+(const Rational &r1)
{
Rational t = r1;
t.numerator = numerator * t.denominator + t.numerator * denominator;
t.denominator = t.denominator * denominator;
cout<<t.numerator<<"/"<<t.denominator<<endl;
return t;
}
void Rational::print()
{
cout<<" Numerator :: "<<numerator<<endl;
cout<<" Denominator :: "<<denominator<<endl;
}
int main()
{
Rational r1 = 1;
r1.print();
cout<<(r1 == 1)<<endl;
cout<<(2 == r1)<<endl;
cout<<(r1 < 2)<<endl;
cout<<(0 < r1)<<endl;
Rational r2 = (r1 + 2);
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.