One More Look at the Calculator

The calculator program was a pretty big program - maybe around 600 lines of code! But when it came time to put it all together, it should have gone together pretty quickly. This is the advantage of the modular apporach we took - once we wrote and tested the components of the overall project in all the drivers, we could concentrate on using them to implement the overall algorithm for the project without having to worry about the details of how each module worked.

Suppose we want to improve the calculator?

We can use same modular approach (and the "throw-away" drivers) to concentrate on just the module that needs to be modified.

For example, if we want to be able to accept negative operands, the place to look is the operand module - get_opnd().

The algorithm we might have for get_opnd() is:

```     Given:  the first character of the operand
Return: the next operand typed as an integer

while character is a digit character
display it
convert and add it in to the number
get the next character

while character is an exponent character
display it
convert and add it in to the exponent
get the next character

if there was an exponent
compute the base to exponent

if character is a space
display it
return the result
otherwise do error handling

```
To handle negative operands, we would expect a '-' before the first digit of the base. So we could modify the algorithm to be:
```     Given:  the first character of the operand
Return: the next operand typed as an integer

if the character is '-'
display it
remember the number is negative

while character is a digit character
display it
convert and add it in to the number
get the next character

if the number is supposed to be negative
negate the number

while character is an exponent character
display it
convert and add it in to the exponent
get the next character

if there was an exponent
compute the base to exponent

if character is a space
display it
return the result
otherwise do error handling

```
Similarly, we could add steps to handle float values for the operand. In this case we add code to detect the '.' after the digits, and accumulate the fractional part. We would also need to modify the print results module to print float values.

Or if we wanted negative exponents as well. We could modifiy get_opnd() to detect the '-' exponent character and negate the exponent. We would also need to modify the exponent module to handle negative exponenets, not just pos_power().

to Overview.