CSE logo University of Washington Computer Science & Engineering
 CSE 374 Programming Concepts and Tools - Homework 7 - Spring 2010
  CSE Home   About Us    Search    Contact Info 

Due: Thursday, June 3, 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 the code for a small calculator for rational number arithmetic, which you can use to test your implementation. But your only job is to implement rational numbers.

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; these are not repeated here to save space. 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 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 / can't be used for division since it is used to enter rational constants). Spaces may separate parts of expressions and subexpressions can be surrounded by parentheses. One limitation is that the calculator only understands 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 produces 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. Use the regular dropbox.


CSE logo Computer Science & Engineering
University of Washington
Box 352350
Seattle, WA  98195-2350
(206) 543-1695 voice, (206) 543-2969 FAX
[comments to Hal Perkins]