CSE 374 15au - Homework 7
Due: Thursday, Dec. 10, at 11 pm.
Synopsis
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
.
Type Rational
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 Rational
s 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.
The Calculator
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.
What to Turn In
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 dropbox.
Computer Science & Engineering University of Washington Box 352350 Seattle, WA 98195-2350 (206) 543-1695 voice, (206) 543-2969 FAX
Comments to adminanchor