Lab 4

Predefined Functions

The assignment contains two parts.


1. Guessing game. Study the gdb debugger again with particular attention to the step, next, print, set, and watch functions. After your program below compiles and contains logic errors, use gdb to determine the difference between step and next, the purpose of watch, print, and set. Use a script to show your lab instructor that you are using these commands. (If, by any wild chance there are no logic errors, introduce some into the code!)


You might find this site helpful as well as the previously posted references on gdb:

http://betterexplained.com/articles/debugging-with-gdb/#comments


Create a single file titled guess.cpp. Program the following game. The computer selects a random number between 0 and 99 and asks the user to guess the number. If the user guesses incorrectly, the computer states whether the selected number is smaller or greater than the guess. The guessing repeats until the user guesses the number. The dialog should look as follows:

I selected a number between 0 and 99, what is it? 30
wrong, it is larger, what is it? 60
wrong, it is smaller, what is it? 50
wrong, it is larger, what is it? 55
wrong, it is smaller, what is it? 53
correct!


For your program you need to use predefined randomization functions rand() and srand() as well as the time function time()

Function time() returns current time (as kept by the computer) in the number of seconds passed since midnight, January 1, 1970. You need to include ctime to use this function. The function takes one argument but for this assignment the argument value is a special named constant NULL. Check
this program for an example of usage.

To use functions rand() and srand() you need to include cstdlib. Function srand() initializes the random number generator of the program. It takes a single integer argument. The value passed to srand() determines the values output by rand(). This value is called a seed.


rand() takes no arguments. Every time rand() is invoked it returns an integer value between 0 and constant RAND_MAX defined in cstdlib. Note that the sequence of values returned by repeated calls of rand() is uniquely determined by the seed passed to srand(). That is, if srand() is passed the same seed, rand() is going to return the same sequence of numbers. This is helpful for debugging. Check
this program for an example of random number manipulation.

Hints: Use fixed values of the seed for your initial debugging, use the output of time() as an unpredictable seed to start the guessing game.


Note that the random value produced by rand() is out of the required range of 0-99. Use just the last two digits of the number. Computing the remainder of the division by 100 will be helpful to get them.


2. Scientific calculator. Study these functions of the math library. Create a single file titled calculator.cpp. Write a program that prints a numbered menu of mathematical operations as shown below. Then prompts the user to select an operation, then prompts and inputs the operands for the selected option (note that some operations require one and some two operands), then computes and outputs the result. The process repeats. The program should quit if the user inputs an option (number) that is not listed. The dialog should look as follows:

1. absolute value
2. ceiling
3. power
4. logarithm
Select an operation: 3
Enter base: 2
Enter exponent: 3
The result is: 8
...


Make sure your programs adhere to proper programming style. Submit your project to the subversion repository. Do not forget to verify your submission on the web.