EE 152 Advanced Programming LAB 7 1) Create a class called Rational for performing arithmetic with fractions. Write a program to test your class. Use integer variables to represent the private data of the class the numerator and the denominator. Provide a constructor that enables an object of this class to be initialized when it is declared. The constructor should contain default values in case no initializers are provided and should store the function in reduced form. For example, the fraction 2 4 would be stored in the object as 1 in the numerator and 2 in the denominator. Provide public member functions that perform each of the following tasks: a) Adding two Rational numbers. The result should be stored in reduced form. b) Subtracting two Rational numbers. The result should be stored in reduced form. c) Multiplying two Rational numbers. The result should be stored in reduced form. d) Dividing two Rational numbers. The result should be stored in reduced form. e) Printing Rational numbers in the form a/b, where a is the numerator and b is the denominator. f) Printing Rational numbers in floating-point format. #ifndef RATIONAL_H #define RATIONAL_H Rational.h class Rational public: Rational( int = 0, int = 1 ); // default constructor Rational addition( const Rational & ); // function addition Rational subtraction( const Rational & ); // function subtraction Rational multiplication( const Rational & ); // function multi. Rational division( const Rational & ); // function division void printrational (); // print rational format void printrationalasdouble(); // print rational as double format private: int numerator; // integer numerator int denominator; // integer denominator void reduction(); // utility function }; // end class Rational #endif
Rational.cpp // Member-function definitions for class Rational. #include <iostream> using std::cout; #include "Rational.h" // include definition of class Rational Rational::Rational( int n, int d ) numerator = n; // sets numerator denominator = d; // sets denominator reduction(); // store the fraction in reduced form } // end Rational constructor Rational Rational::addition( const Rational &a ) t.numerator = a.numerator * denominator; t.numerator += a.denominator * numerator; t.denominator = a.denominator * denominator; } // end function addition Rational Rational::subtraction( const Rational &s ) t.numerator = s.denominator * numerator; t.numerator -= denominator * s.numerator; t.denominator = s.denominator * denominator; } // end function subtraction Rational Rational::multiplication( const Rational &m ) t.numerator = m.numerator * numerator; t.denominator = m.denominator * denominator; } // end function multiplication Rational Rational::division( const Rational &v )
t.numerator = v.denominator * numerator; t.denominator = denominator * v.numerator; } // end function division void Rational::printRational () if ( denominator == 0 ) // validates denominator cout << "\ndivide BY ZERO ERROR!!!" << '\n'; else if ( numerator == 0 ) // validates numerator cout << 0; else cout << numerator << '/' << denominator; } // end function printrational void Rational::printRationalAsDouble() cout << static_cast< double >( numerator ) / denominator; } // end function printrationalasdouble void Rational::reduction() int largest; largest = numerator > denominator? numerator : denominator; int gcd = 0; // greatest common divisor 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
#include <iostream> using std::cout; using std::endl; Solution.cpp #include "Rational.h" // include definition of class Rational int main() Rational c( 2, 6 ), d( 7, 8 ), x; // creates three rational objects cout << " + "; x = c.addition( d ); // adds object c and d; sets the value to x cout << " - "; x = c.subtraction( d ); // subtracts object c and d cout << " x "; x = c.multiplication( d ); // multiplies object c and d cout << " / "; x = c.division( d ); // divides object c and d
cout << endl; return 0; } // end main