Objective
The purpose of this assignment, is for students to demonstrate knowledge of
- the basic template of a simple C program
- the design of user defined C functions
- calling user defined functions in C
- how solution to problems can be developed from a set a functions
Problem:
Your little brother is having trouble with arithmetic. Your parents realize that after taking a few weeks of your C programming course, that you could potentially write a computer program that will allow him to practice his arithmetic skills.
In particular, your program will allow your brother to play two separate games:
- A game where he has to complete several additions or multiplications.
- A game where he has to determine a secret number after being told if his guesses are too high or too low.
Your program should prompt your brother with the following menu:
- Play Arithmetic Game
- Play Guessing Game
- Print Score
- Quit
If he chooses option 1, then you should prompt him with the following menu choices:
- Addition
- Multiplication
Your program should then prompt him for the maximum value of the numbers to be used in the problems and the total number of questions.
Then it should play the game by prompting him with the desired number of additions/multiplications. Your program should keep track of how much time he takes for these problems. In addition, 5 penalty seconds should be added for each incorrect response. The total time he takes (taking into account the penalty seconds) will be used to determine his score for the round.
If he chooses option 2, then you should prompt him for the maximum integer, n, for the guessing game. Then your program should generate a random integer in between 1 and n, inclusive. After that, it should prompt your brother for his first guess. After each guess, your program should tell him whether to guess higher or lower. This continues until he gets the number exactly. Your program should also keep track of how much time the game takes to play. This value will be used to determine his score for the round.
For option 3, simply report your brothers total score, which is the sum of his scores from each round he plays.
Scoring Details
For the arithmetic game, the score your brother earns is equal to the total amount of time (in seconds) it took him to finish the problems (including penalty seconds) divided by the number of problems he solved.
For the guessing game, the score your brother earns is equal to the total amount of time (in seconds) it took him to guess the secret number divided by two times the number of digits in the maximum number allowed in the game. (For example if the maximum number was 1000, and he took 15 seconds to guess the correct number, then his score would be 15/(2*4) = 1.875.)
The score in seconds then must be converted to an integer number of points in between 0 and 10. In particular, the conversion works as shown in the chart below:
Time, t, (in seconds) | Corresponding Score |
t < 1 | 10 |
1 t < 2 | 9 |
2 t < 3 | 8 |
3 t < 4 | 7 |
4 t < 5 | 6 |
5 t < 6 | 5 |
6 t < 7 | 4 |
7 t < 8 | 3 |
8 t < 9 | 2 |
9 t < 10 | 1 |
t 10 | 0 |
Implementation Details
You will be required to write the four functions described below. (Note: you may write other functions as well, but these FOUR are required.)
- A function called arithGame which takes 3 integer parameters max, quantity and op; and returns a double. This function gives the user quantity arithmetic questions, where each operand ranges from 1 to max, inclusive. The value of op (operator) dictates whether the problems are addition or multiplication problems. Namely, if op is 1, they are addition problems, otherwise, they are multiplication problems. The function returns the number of seconds the user took to play the entire game, divided by the number of problems they solved.
- A function called guessGame which takes 1 integer parameter max and returns a double. This function allows the user to play the guessing game where the randomly generated number lies in between 1 and max, inclusive. The value returned is the number of seconds the user took to finish the game divided by the 2 times the number of digits in the number max.
- A function called numDigits which takes an integer parameter number and returns an integer which is equal to the number of digits in number.
- A function called numPoints which takes a double parameter timesec and returns an integer. Returns the number of points the user has earned based on time. In particular, if time is less than 1, 10 is Otherwise, if it is less than 2, 9 is returned, etc. If time is greater than or equal to 10, then 0 is returned.
Other Useful Information
To generate a random number from 0 to b in C we use the function call rand()%(b+1). If you want to generate a number from a to b, use the function call rand()%(b+1-a) + a.
For example to get a random number from 5 to 25 inclusive we use rand()%21 + 5 Seed the random number generator at the beginning of your program. Do this exactly once. Here is the line of code:
srand(time(0));
In order to use this you need to include stdlib.h and time.h at the top of the program.
Please use the following constants for ADD and MULT
#define ADD 1
#define MULT 2
In order to calculate how much time something takes, you can use the time function. In particular, the function call time(0) returns a double that represents the number of seconds after some time. In order to effectively use this, you must call the function twice: once right before you start what you want to time, and once right afterwards. Subtract these two values to obtain the amount of time a segment of code took. Here is a short example:
int start = time(0);
/* Insert code you want to time here. */ int end = time(0); int timespent = end start;
printf(Your code took %d seconds.
, timespent);
In order to carry out the scoring function, it may be helpful to look at the following functions in the math library:
double ceil(double x);
double floor(double x);
Remember, if you want to convert a double to a corresponding integer, you can use a cast as in the example below, where we assume that value is an integer and seconds is a double:
value = (int)seconds;
References
Textbook: Chapters 3 and 4
Restrictions
Name the file you create and turn in game.c.
Submission of Assignment
Your assignment should be submitted via Webcourses by the deadline. No assignments will be accepted via email. Your submission should include a single .c file called game.c. . Remember that your program will be graded using DevC++ , so be sure that your submitted code runs correctly in this IDE. If you do not have DevC++ on your personal machine, you may use a computer in any lab to test your code.
Sample run 1
Please make a selection from the following:
- Play Arithmetic Game.
- Play Guessing Game.
- Print Score.
1
Would you like, 1)Addition or 2)Multiplication?
1
What is the maximum number you would like?
100
How many problems do you want?
4
What is 21+86?
107 Correct, great job!
What is 87+96?
173
Sorry, thats incorrect, the answer is 183.
What is 86+70?
156 Correct, great job!
What is 55+4?
59
Correct, great job!
You took an average of 6.000000 seconds per question.
Your score for the round is 4.
Please make a selection from the following:
- Play Arithmetic Game.
- Play Guessing Game.
- Print Score.
2
Enter the maximum number for the game. 100
Enter the guess!
50
Your guess is too high, try again.
Enter your guess!
30
Your guess is too high, try again.
Enter your guess! 10
Your guess is too high, try again.
Enter your guess!
5
Your guess is too low, try again.
Enter your guess!
7
Your guess is too high, try again.
Enter your guess!
6
Great, you guessed the correct number 6 in 6 guesses in 10 seconds.
Your score for the round is 9.
Please make a selection from the following:
- Play Arithmetic Game.
- Play Guessing Game.
- Print Score.
3
Your score is 13.
Please make a selection from the following:
- Play Arithmetic Game.
- Play Guessing Game.
- Print Score.
4
Thank you for playing!
Reviews
There are no reviews yet.