|
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