You are on page 1of 5

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.

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

You might also like