/****************************************************** Name: Filename: RationalNum.cpp ******************************************************/ #include #include #include "RationalNum.h" using namespace std; RationalNumber::RationalNumber( int n, int d ) { numerator = n; denominator = d; reduction(); } const RationalNumber RationalNumber::operator+( const RationalNumber &s ) { RationalNumber sum; sum.numerator = numerator * s.denominator + denominator * s.numerator; sum.denominator = denominator * s.denominator; sum.reduction(); return sum; } const RationalNumber RationalNumber::operator-( const RationalNumber &s ) { RationalNumber sub; sub.numerator = numerator * s.denominator - denominator * s.numerator; sub.denominator = denominator * s.denominator; sub.reduction(); return sub; } const RationalNumber RationalNumber::operator*(const RationalNumber &m) { RationalNumber multiply; multiply.numerator = numerator * m.numerator; multiply.denominator = denominator * m.denominator; multiply.reduction(); return multiply; } const RationalNumber RationalNumber::operator/( RationalNumber &d ) { RationalNumber divide; if ( d.numerator !=0 ) { divide.numerator = numerator * d.denominator; divide.denominator = denominator * d.numerator; divide.reduction(); } else { cout << "Divide by zero error: terminating program\n"; exit( 1 ); } return divide; } bool RationalNumber::operator>(const RationalNumber &gr ) const { if ( static_cast< double >( numerator ) / denominator > static_cast< double >( gr.numerator ) / gr.denominator ) return true; else return false; } bool RationalNumber::operator<(const RationalNumber &lr ) const { return !(*this > lr); } bool RationalNumber::operator>=( const RationalNumber &rat ) const { return *this == rat || *this > rat; } bool RationalNumber::operator<=( const RationalNumber &rat ) const { return *this == rat || *this < rat;} bool RationalNumber::operator==( const RationalNumber &rat ) const { if (numerator == rat.numerator && denominator == rat.denominator) return true; else return false; } bool RationalNumber::operator!=( const RationalNumber &rat ) const { return !(*this == rat); } void RationalNumber::printRational( void ) const { if ( numerator == 0 ) // Fraction as zero cout << numerator; else if ( denominator == 1 ) // Fraction as integer cout << numerator; else cout << numerator << '/' << denominator; } void RationalNumber::reduction( void ) { int smallest, gcd = 1; // GCD smallest = ( numerator < denominator ) ? numerator : denominator; for ( int loop = 2; loop <= smallest; ++loop ) if ( numerator % loop == 0 && denominator % loop == 0 ) gcd = loop; numerator /= gcd; denominator /= gcd; }