In: Computer Science
9.6 (Rational Class)
Create a class called Rational (separate the files as shown in the chapter) 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's declared. The constructor should contain default values in case no initializers are provided and should store the fraction 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:
(make sure the driver tests out all the functions)
ANSWER :-
GIVEN THAT :-
METHOD :1
import math
import fractions
def add(fr1, fr2):
print('{} + {} = {}'.format(fr1.num, fr2.num, fr1.num +
fr2.num))
def subtract(fr1, fr2):
print('{} - {} = {}'.format(fr1.num, fr2.num, fr1.num -
fr2.num))
def multiply(fr1, fr2):
print('{} * {} = {}'.format(fr1.num, fr2.num, fr1.num *
fr2.num))
def divide(fr1, fr2):
print('{} / {} = {}'.format(fr1.num, fr2.num, fr1.num /
fr2.num))
def toRationalString(fr):
print(str(fr.num))
def display(fr):
print(fr.num)
def toDouble(fr):
print(float(fr.num))
#Python's built-in float type has double precision
class Rational:
def __init__(self, nr=0, dr=1):
gcd = math.gcd(nr, dr)
self.__nr = nr // gcd
self.__dr = dr // gcd
self.num = fractions.Fraction(self.__nr, self.__dr)
n1 = Rational(5, 3)
n2 = Rational(7, 3)
add(n1, n2)
subtract(n1, n2)
multiply(n1, n2)
divide(n1, n2)
toRationalString(n1)
toRationalString(n2)
display(n1)
display(n2)
toDouble(n1)
toDouble(n2)
OUT PUT:-
METHOD :2
Rational.h
#ifndef RATIONAL_H
#define 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 )
{
Rational t; // creates Rational object
t.numerator = a.numerator * denominator;
t.numerator += a.denominator * numerator;
t.denominator = a.denominator * denominator;
t.reduction(); // store the fraction in reduced form
return t;
} // end function addition
Rational Rational::subtraction( const Rational &s )
{
Rational t; // creates Rational object
t.numerator = s.denominator * numerator;
t.numerator -= denominator * s.numerator;
t.denominator = s.denominator * denominator;
t.reduction(); // store the fraction in reduced form
return t;
} // end function subtraction
Rational Rational::multiplication( const Rational &m )
{
Rational t; // creates Rational object
t.numerator = m.numerator * numerator;
t.denominator = m.denominator * denominator;
t.reduction(); // store the fraction in reduced form
return t;
} // end function multiplication
Rational Rational::division( const Rational &v )
{
Rational t; // creates Rational object
t.numerator = v.denominator * numerator;
t.denominator = denominator * v.numerator;
t.reduction(); // store the fraction in reduced form
return t;
} // 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
Solution.cpp
#include <iostream>
using std::cout;
using std::endl;
#include "Rational.h" // include definition of class Rational
int main()
{
Rational c( 2, 6 ), d( 7, 8 ), x; // creates three rational
objects
c.printRational(); // prints rational object c
cout << " + ";
d.printRational(); // prints rational object d
x = c.addition( d ); // adds object c and d; sets the value to
x
cout << " = ";
x.printRational(); // prints rational object x
cout << '\n';
x.printRational(); // prints rational object x
cout << " = ";
x.printRationalAsDouble(); // prints rational object x as
double
cout << "\n\n";
c.printRational(); // prints rational object c
cout << " - ";
d.printRational(); // prints rational object d
x = c.subtraction( d ); // subtracts object c and d
cout << " = ";
x.printRational(); // prints rational object x
cout << '\n';
x.printRational(); // prints rational object x
cout << " = ";
x.printRationalAsDouble(); // prints rational object x as
double
cout << "\n\n";
c.printRational(); // prints rational object c
cout << " x ";
d.printRational(); // prints rational object d
x = c.multiplication( d ); // multiplies object c and
d
cout << " = ";
x.printRational(); // prints rational object x
cout << '\n';
x.printRational(); // prints rational object x
cout << " = ";
x.printRationalAsDouble(); // prints rational object x as
double
cout << "\n\n";
c.printRational(); // prints rational object c
cout << " / ";
d.printRational(); // prints rational object d
x = c.division( d ); // divides object c and d
cout << " = ";
x.printRational(); // prints rational object x
cout << '\n';
x.printRational(); // prints rational object x
cout << " = ";
x.printRationalAsDouble(); // prints rational object x as
double
cout << endl;
return 0;
} // end main
****** PLEASE LIKE *****