1/****************************************************************
2 *    NAME: Michael J. Radwin
3 *    ACCT: mradwin
4 *    FILE: Rational.H
5 *    DATE: Sat Mar  4 01:47:16 EST 1995
6 *     $Id: Rational.H 10 2002-07-09 12:24:59Z ejakowatz $
7 ****************************************************************/
8
9class Rational {
10  friend ostream & operator<<(ostream &output, const Rational &r);
11  friend Rational pow(const Rational &r, int exp);
12  friend Rational operator+(int n, const Rational &r);
13  friend Rational operator-(int n, const Rational &r);
14  friend Rational operator*(int n, const Rational &r);
15  friend Rational operator/(int n, const Rational &r);
16  friend int operator==(int n, const Rational &r);
17  friend int operator!=(int n, const Rational &r);
18  friend int operator< (int n, const Rational &r);
19  friend int operator> (int n, const Rational &r);
20  friend int operator<=(int n, const Rational &r);
21  friend int operator>=(int n, const Rational &r);
22
23public:
24  Rational(int num, int den = 1);
25  Rational(const Rational &r);
26  ~Rational();
27
28  Rational operator+(const Rational &r) const;
29  Rational operator-(const Rational &r) const;
30  Rational operator*(const Rational &r) const;
31  Rational operator/(const Rational &r) const;
32  const Rational & operator= (const Rational &r);
33  const Rational & operator+=(const Rational &r);
34  const Rational & operator-=(const Rational &r);
35  const Rational & operator*=(const Rational &r);
36  const Rational & operator/=(const Rational &r);
37
38  Rational operator+(int r) const;
39  Rational operator-(int r) const;
40  Rational operator*(int r) const;
41  Rational operator/(int r) const;
42  const Rational & operator= (int r);
43  const Rational & operator+=(int r);
44  const Rational & operator-=(int r);
45  const Rational & operator*=(int r);
46  const Rational & operator/=(int r);
47
48  Rational operator-() const;
49  int operator! () const;
50  int operator==(const Rational &r) const;
51  int operator==(int r) const;
52  int operator!=(const Rational &r) const;
53  int operator!=(int r) const;
54  int operator< (const Rational &r) const;
55  int operator< (int r) const;
56  int operator> (const Rational &r) const;
57  int operator> (int r) const;
58  int operator<=(const Rational &r) const;
59  int operator<=(int r) const;
60  int operator>=(const Rational &r) const;
61  int operator>=(int r) const;
62
63private:
64  Rational() {}
65  static int compute_gcd(int a, int b);
66  static int gcd(int bigger, int smaller);
67  int n, d;
68};
69
70// global prototypes
71ostream & operator<<(ostream &output, const Rational &r);
72Rational pow(const Rational &r, int exp);
73Rational operator+(int n, const Rational &r);
74Rational operator-(int n, const Rational &r);
75Rational operator*(int n, const Rational &r);
76Rational operator/(int n, const Rational &r);
77int operator==(int n, const Rational &r);
78int operator!=(int n, const Rational &r);
79int operator< (int n, const Rational &r);
80int operator> (int n, const Rational &r);
81int operator<=(int n, const Rational &r);
82int operator>=(int n, const Rational &r);
83