Please use the easiest way! 1. Create a class RationalNumber (fractions) with th
ID: 3630422 • Letter: P
Question
Please use the easiest way!
1. Create a class RationalNumber (fractions) with the following capabilities:
** Create a constructor that prevents a 0 denominator in a fraction, reduces or simplifies fractions that are not in reduced form and avoids negative denominators.
**Overload the addition, subtraction, multiplication and division operators for this class.
** Overload the relational (either < or > AND <= or >=) and equality operators(either != OR ==) for this class.
Here are the formulas for the four arithmetic operations applied to fractions:
o Addition: a/b + c/d = (a*d + b*c) / (b*d)
o Subtraction: a/b - c/d = (a*d - b*c) / (b*d)
o Multiplication: a/b * c/d = (a*c) / (b*d)
o Division: a/b / c/d = (a*d) / (b*c)
The user should type the first fraction, an operator, anda second fraction. The program should then display the result and ask if the user wants to continue.
Explanation / Answer
#include "stdafx.h"
#include <iostream>
using namespace std;
class RationalNumber
{
friend istream & operator >> (istream &, RationalNumber &);
friend ostream & operator << (ostream &, RationalNumber &);
public:
RationalNumber( int = 0, int = 1 ); // default constructor
RationalNumber operator+(RationalNumber x);
RationalNumber operator-(RationalNumber x);
RationalNumber operator*(RationalNumber x);
RationalNumber operator/(RationalNumber x);
bool operator<(RationalNumber x);
bool operator<=(RationalNumber x);
bool operator!=(RationalNumber x);
private:
int numerator; // private variable numerator
int denominator; // private variable denominator
void reduction(); // function for fraction reduction
}; // end class RationalNumber
//overloading extraction operator
istream& operator >> (istream &in, RationalNumber &num)
{
in>>num.numerator;
in>>num.denominator;
return in;
}
//overloading insertion operator
ostream& operator << (ostream &out, RationalNumber &num)
{
out<<num.numerator <<"/"<<num.denominator;
return out;
}
//reduces the fraction
void RationalNumber::reduction()
{
int largest;
int gcd = 0; // greatest common divisor
largest = numerator > denominator ? numerator : denominator;
for ( int loop = 2; loop <= largest; loop++ )
if ( numerator % loop == 0 && denominator % loop == 0 )
gcd = loop;
if (gcd != 0)
{
numerator /= gcd;
denominator /= gcd;
} // end if
} // end function reduction
//constructor
RationalNumber::RationalNumber(int n, int d)
{
numerator = n;
denominator = (d <= 0) ? 1 : d ;
}
//overloading addition operator
RationalNumber RationalNumber::operator + (RationalNumber x)
{
RationalNumber temp;
temp.numerator=numerator*x.denominator+x.numerator*denominator;
temp.denominator=x.denominator*denominator;
temp.reduction();
return(temp);
}
//overloading subtraction operator
RationalNumber RationalNumber::operator - (RationalNumber x)
{
RationalNumber temp;
temp.numerator=numerator*x.denominator-x.numerator*denominator;
temp.denominator=x.denominator*denominator;
temp.reduction();
return(temp);
}
//overloading multiplication operator
RationalNumber RationalNumber::operator *(RationalNumber x)
{
RationalNumber temp;
temp.numerator=numerator*x.numerator;
temp.denominator=denominator*x.denominator;
temp.reduction();
return(temp);
}
//overloading division operator
RationalNumber RationalNumber::operator / (RationalNumber x)
{
RationalNumber temp;
temp.numerator=numerator*x.denominator;
temp.denominator=denominator*x.numerator;
temp.reduction();
return(temp);
}
//overloading relation operator lessthan
bool RationalNumber::operator<(RationalNumber x)
{
float value = ((float) this->numerator)/this->denominator;
float xValue = ((float) x.numerator)/x.denominator;
return (value < xValue);
}
//overloading relation operator lessthan or equal to
bool RationalNumber::operator<=(RationalNumber x)
{
float value = ((float) this->numerator)/this->denominator;
float xValue = ((float) x.numerator)/x.denominator;
return (value <= xValue);
}
//overloading relation operator not equla to
bool RationalNumber::operator != (RationalNumber x)
{
float value = ((float) this->numerator)/this->denominator;
float xValue = ((float) x.numerator)/x.denominator;
return (value != xValue);
}
// main function
int main()
{
RationalNumber a,b;
char ch, choise;
do
{
cout << "Enter the first fraction: ";
cin >> a;
cout<<"Enter operator (+, - , * or /): ";
cin>>ch;
cout << "Enter the second fraction: ";
cin >> b;
RationalNumber c;
switch(ch)
{
case '+': c = a+b; break;
case '-': c = a-b; break;
case '*': c = a*b; break;
case '/': c = a/b; break;
default : cout<<"Invalid choise"<<endl;
}
cout << " The reuslt is: " << c<<endl;
cout<<" Do you want to continue (y-yes, n-no): ";
cin>>choise;
}while(choise != 'n' && choise!='N');
return 0;
}