You are going to write a program to help students practice their basic arithmetic skills, addition, subtraction, multiplication and division. You'll use a random number generator to create problems for solution, check the student's answers and give a performance report at the end.

The student identifier is simply an integer the student types in when the program starts. It is shown on the final report.

The problems should use randomly generated numbers from 0 to 99.
Write a function, *getrand*, that will return a random number from
0 to 99. Look at the code you used in the last program to
generate a number in the desired range.
Don't worry about calling srand() at this point; the seed
will be given a default value if you don't call srand() at all.
Use *getrand* to write a function, called *add,*
that will perform the work described above.
This function should return two numbers, which are the number of problems
the student tried and the number they got right.

Also write a function called *report* that will take three numbers
as parameters, the student id, the number of problems
attempted and the number correct, and write the information
to the screen.

Note the formatting of the addition problem: the numbers are
lined up on the right. You can do this using the function call
**cout.width( constant);**
where

Example Run: (user input in bold)Enter student id:1234Addition 23 45 -----68Right!! Again? y/nyAddition 49 7 -----56Right!! Again? y/nnStudent Number 1234 Number Attempted 2 Number Correct 2 Percent Correct 100.0%

Write a function called

Use *menu* to get the student's choice in your main function, then
use a switch statement to call
four different functions, *add, sub, mul, or div, *
depending on what the student's choice was.
The student will only practice with one operation during one
run of the program. That is, the menu will be shown only
once when the program is run.

The four functions will be very similar but not all precisely the same. For subtraction, you want to make sure that the answer to the problem is a positive (or zero) number, not a negative number. You may have to get random numbers more than once to make sure this is true. For division, you, of course, want to make sure you don't ask the student to divide by zero. You also want the answer to be a whole number, not a fraction. Again, you will have to check your random numbers to make sure this is true.

Use an enumerated type to represent the four operations: add, subtract, multiply and divide. This will make things in your switch statement code clearer.

Example Run: (user input in bold)Enter student id:1234Arithmeic Tutor A = Addition S = Subtraction M = Multiplication D = Division Q = quit Enter choice - A S D M QaAddition 92 54 -----148Wrong!! The right answer is 146 Again? y/nyAddition 44 84 -----128Right!! Again? y/nnStudent Number 1234 Number Attempted 2 Number Correct 1 Percent Correct 50.0%

One factor that should be adjustable is the level of difficulty of the questions. The student will be able to specify a difficulty level of 1 to 5, which means the maximum number of digits in the numbers in the problems. So a difficulty level of 1 would give problems like 7 + 5 or 3 - 2, a difficulty level of 3 would give problems like 298 + 41 or 732 * 382 or 781 - 3. This can be accomplished by the expression below, which uses the difficulty level as a power of 10 and then uses this number to find the random number for the problem.

number = rand() % (10 raised to the power of the difficulty)

You should call a mathematical function to find the expression in the parentheses. Rewrite the getrand function so that it has one parameter, the difficulty. It returns the next random number in the range 0 through 10 to the power of difficulty -1. If the difficulty is 1, the numbers will be from 0 to 9; if the difficulty is 2, the numbers will be from 0 to 99; if the difficulty is 3, the numbers will be from 0 to 999, and so on. The main function will have to ask the student for this value (check for a correct value), and you will need to adjust the four operator functions to accept this value from the main, so it can be passed to getrand.

Example Run: (user input in bold)Enter student id:1234Enter a number for a seed:834Enter level of difficulty (1 is easiest, 5 is hardest)3A = Addition S = Subtraction M = Multiplication D = Division Q = quit Enter choice - A S D M QaAddition 902 534 -----1438Wrong!! The right answer is 1436 Again? y/nyAddition 434 874 -----1308Right!! Again? y/nnStudent Number 1234 Number Attempted 2 Number Correct 1 Percent Correct 50.0% At difficulty level 3

**Testing:**

Capture test runs at **each** phase, ones where the student
missed some problems, missed them all, got them all right, etc.
Test your program for a while without calling srand(). This will
produce the same random numbers each time you run the program.
For the final program, ask the user for a number at the
beginning of the program for the seed, as you did in the last program.

**Design**

Write a pseudocode design for Phase II at detail Level 2.
This will be discussed in a designated recitation, and you will
be responsible for having it in readable form at that time.
**
Please read the documentation standard.
** As you can see from looking at the grading sheet,
we will be looking to see how you meet these standards.
Every function needs a description of its purpose and
its parameters. Local variables need documentation too.

**As described in the documentation standard,
turn in the following, neatly stapled, in this order:
**

- Printout of the grading sheet for this assignment
- Pseudocode design of the solution for the problem - at least Phase II
- Printout of the source program - for Phase III
- Captures of the test runs for all phases, labeled with what you are testing