# Hands On C++: Project 14

## The Projects

Your instructor will assign you one of the problems below. To solve your problem, write a program that reads the necessary information to compute and output the indicated values, as efficiently as possible. Following the pattern in the lab exercise, first, design using OCD; then code your design in C++ using stepwise translation; finally, test your program thoroughly.

Project #14.1: A polynomial of degree n has the form:
`a + bx + cx2 + ... + gxn-1 + hxn`
The values `a, b, c, ..., g, h` are numeric constants called the coefficients of the polynomial, with h != 0. For example:
`1 + 3x - 7x3 + 5x4`
is a polynomial of degree 4 with integer coefficents of 1, 3, 0, -7 and 5. Design and implement a `Polynomial` class that can represent such a polynomial. Store the coefficients in a `list` instance variable of your class. Provide a constructor, an output operation that displays a `Polynomial` in easy-to-read format (i.e., using `^` to represent exponentiation), an input operation that allows a user a polynomial like that shown above, and an evaluate operation that given an `x`-value, returns the value of the polynomial for that value.

To test your class, write a program that reads a polynomial and values for `x` and displays the corresponding polynomial values.

Project #14.2: The rock group Flink Poyd is giving a concert and you have been hired by the night club where they are playing. The club seats 100 people, and tickets will be sold in advance. Ticket requests are to be filled in the order in which they are received, with a maximum of four tickets per person. Write an `TicketOrder` class that stores a name, address, and number of tickets in a ticket order. Your class should provide input, output, and the equality operations.

Using your class, write a program that a box office cashier can use to enter the names, addresses, and number of tickets for a sequence of orders. The orders should be stored in a `list`. Your program should check that no one received more than four tickets, and that the same person does not submit multiple orders. When all the tickets have been ordered (or on a special keyboard input), your program is to generate a series of mailing labels (Name, Address, number of tickets) that a clerk can use to fill the orders.

Project #14.3: Design and implement a `BigInt` class whose values are large integers with perhaps hundreds of digits. Represent each number as a `list`, each of whose elements is a block of digits of the big integer. Overload the addition and subtraction operators for this class. Do so by adding the `list`s value-by-value, carrying from one element to the next as necessary. Write a two-function `BigInt` calculator to test your program.

For some extra fun, overload the multiplication and division operators, too.

Project #14.4: Write a `Print()` library function template that, given a `list`, displays each value in the `list` on a separate line. Use an iterator as described in C++ An Introduction to Computing.

Add a `Read()` function template that, given a `list`, fills it with input values from the keyboard.

Using `Print()` and `Read()`, overload `operator<<` and `operator>>` with function templates so that `list` values can be read and displayed conveniently. Store these functions in the library as well.

Add a template for `operator+` that, given two `list`s, returns the concatenation of the two `list`s. Then write a driver program that tests your functions.

## Turn In

Turn the following things:

4. The output from an execution of your program.