ex3-3.cpp - Example 3-3 The fraction class

// File: ex3-3.cpp - the fraction class

#include <iostream>
#include <cstdlib>	// for abs()
using namespace std;

class fraction
{
public:
	// member function prototypes
    void set(int, int);
    void display(void);
    void add(fraction&, fraction&);
    void subtract(fraction&, fraction&);
    void multiply(fraction&, fraction&);
    void divide(fraction&, fraction&);
    void reduce(void);
private:
    int numer;  // numerator
    int denom;  // denominator
};

// member function definitions
void fraction::set(int n, int d)
{
	numer = n;
	denom = d;
	return;
}

void fraction::display(void)
{
	cout << numer << '/' << denom << endl;
	return;
}

void fraction::add(fraction& f1, fraction& f2)
{
	numer = f1.numer * f2.denom + f2.numer * f1.denom;
	denom = f1.denom * f2.denom;
	return;
}

void fraction::multiply(fraction& f1, fraction& f2)
{
	numer = f1.numer * f2.numer;
	denom = f1.denom * f2.denom;
	return;
}

#if 0
void fraction::reduce(void)
{
	int min;
	// find the minimum of the denom and numer
	min = abs(denom) < abs(numer) ? abs(denom) : abs(numer);
	for (int i = 2; i <= min; i++)
	{
		while ((abs(numer) % i == 0) && (abs(denom) % i == 0))
		{
			numer /= i;
			denom /= i;
		}
	}
	return;
}
#endif
int main(void)
{
	fraction f,g,h;       // declare fractions f, g, and h
	f.set(3,4);           // initialize fraction f & g
	g.set(7,20);
	f.display();          // display fraction f & g
	g.display();
	h.add(f,g);           // h = f + g
	h.display();          // display h
	h.reduce();           // reduce h
	h.display();
	h.multiply(f,g);      // h = f * g
	h.display();
	int i,j;
	cout << "Enter a fraction numerator and denominator => ";
	cin >> i >> j;
	h.set(i,j);
	h.multiply(h,h);
	cout << i << '/' << j << " squared is ";
	h.display();
	return 0;
}


void swap(int& x, int& y) 
{  
	int temp;
	temp = x;
	x = y;
	y = temp;
}

int gcd (int x, int y) {
	if (x < y) swap(x,y);
	int rem = x % y;
	while (rem > 1) {
		return gcd(y,rem);
	}
	return y;
}

void fraction::reduce(void)
{
    int divisor = gcd(numer,denom);
	numer /= divisor;
	denom /= divisor;
	return;
}



CIS27: Programming in C++    Instructor: Joe Bentley