30 points
	  Due: Thursday, June 6, 2019, at 11:59pm
In this assignment you will supply the implementation of a C++ type
	  for Rational numbers. You should do this assignment alone. We will
	  supply you with  a small calculator program that evaluates  arithmetic
	  expressions using your code. You can use this to experiment with and
	  test your implementation. But your only job is to provide an
	  implementation of type Rational. As a reminder, in mathematics,
	  a rational number is any number that can be expressed as the quotient or
	  fraction p / q of two integers, a numerator p and
	  a non-zero denominator q.
Rational is specified in  file Rational.h;
	  there is a corresponding implementation file Rational.cpp in the
	  starter code that is empty. Your job is to supply an implementation of
	  Rational in  file Rational.cpp.
You should download  the archive rational.tar
	  (right-click the link), which contains the starter code. File
	  Rational.h in the starter code contains descriptions of the
	  operations of the type; to save space these are not repeated here. The
	  archive also contains the source code for a small calculator program
	  that uses Rationals and a simple Makefile to
	  build it.
Your implementation of Rationals should return values in
	  lowest (i.e., factored) terms. In other words, the greatest common
	  divisor of the numerator and denominator of a Rational
	  should be 1, as far as can be detected by a program using type
	  Rational. Furthermore, as far as an observer can tell, the
	  denominator of a Rational should always be non-negative;
	  the numerator may be positive or negative as appropriate. This does not
	  constrain how Rationals are actually represented, just how
	  they can be observed to behave.
You should implement type Rational as defined in
	  Rational.h. You may not modify the contents of this header
	  file or add or delete anything from it. You are free, of course, to
	  include additional helper functions and data in your
	  Rational.cpp implementation file if these are useful.
You do not need to check for or deal with rationals that have a denominator
	  of 0 or similar issues. If a client of type Rational creates a
	  Rational with a denominator of 0, or if a calculation produces
	  such a result, simply create that result and return it.
You should use good style in your code, just like in our C programs, including using clint.py to check for issues.
The calculator program (supplied) is a simple line-oriented calculator for expressions involving rational numbers. Rationals can be entered as either a positive integer n, meaning n/1, or as a pair of positive integers separated by a slash: n/d. Numbers can be combined in expressions in the usual way with the operators +, -, *, and % (for divide - the / isn't used to indicate division of two rationals since it is used to enter a single rational value). Spaces may separate parts of expressions, and subexpressions can be surrounded by parentheses. One limitation is that the calculator only implements binary operators; in particular it doesn't support unary minus. To compute -r, you can evaluate 0-r. All expressions must be entered on a single line, and the calculator evaluates the expression on each input line and prints the result. The end of input is indicated by typing the usual end-of-file character (ctrl-D in Linux shell windows). The calculator makes no effort to detect or report errors such as illegal input, additional characters on the input line following a complete expression, or rationals with a denominator of 0. If it is unable to make sense out of something, it usually generates the result 0/0 and goes on to process the next input line.
Remember  that your job in this assignment is only to implement type
	  Rational. The calculator program is intended as a way of
	  testing and demonstrating that your Rational type works
	  properly, but you are not responsible for any of its quirks or for
	  fixing any odd behavior that you may discover.
You should  turn in only the file Rational.cpp containing your
	  implementation of type Rational. Be sure to include your name
	  at the top of the file. Use the regular Canvas dropbox.