Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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;

}