HW 1
Reaction Tester
Problem
In this assignment, you will write C code for a "reaction tester". The reaction tester will measure the user's time to solve trivial sums.
The reaction tester should present 5 random one-digit addition problems with one-digit solutions to the user. As each problem is presented, the time the user takes to enter a correct solution should be measured. If the user enters an incorrect solution, replacement problems should be presented until a correct solution is obtained.
When the testing is finished, the reaction tester should present a report consisting of:
- Number of incorrect responses.
- Minimum time in milliseconds to correctly solve a problem.
- Maximum time in milliseconds to correctly solve a problem.
- Average solution time in milliseconds over all correct answers.
Example Run
$ ./reaction
3 + 5 = 8
2 + 0 = 2
1 + 8 = 9
6 + 1 = 7
6 + 2 = 7
wrong: answer was 8
7 + 2 = 9
wrong answers: 1
minimum time: 1624 ms
maximum time: 2192 ms
average time: 1793 ms
$
Hints
To make this program work, you will want:
The
random()
andsrandom()
C library functions, to produce random problems. Note that you can get a random digit viarandom() % 10
.The
getpid()
C library function, to get a "seed" value forsrandom()
, so that successive runs of the program present different problems.The
gettimeofday()
C library function, to find out how long the user spent reacting.
Coding Style
Please name your program reaction.c
. Your program must
finish with a zero exit status.
Your program must be formatted according to the Linux kernel coding style https://www.kernel.org/doc/Documentation/CodingStyle, which is basically "K\&R". You will be using "C99", so take advantage of its features, including mid-block definitions and for-loop variable definitions:
for (int i = 0; i < 100; i++)
The code should be as clear and readable as you can make it: the graders and TAs are going to read a lot of programs, and if yours is hard to understand they will just subtract points and move on.
Your program must start with a comment containing a valid copyright line and a comment indicating the function of the program. For example
/* Copyright (c) 2016 Bart Massey */
/* Reaction Tester */
Each non-trivial function should have a short comment at the top indicating its behavior.
Your program must have a Makefile
that will build it
using gcc
as the C compiler. The default compiler flags
must include -std=c99 -Wall -Werror
.
Writeup
Your submission must include a writeup in Markdown format
http://daringfireball.net/projects/markdown/ in a file
named README.md
. The writeup should contain your name,
a sample run of your program (like the one above), and a
description of anything interesting about your program or
its development.
Source Control
For this assignment, you are not required to use source control. However, I strongly suggest putting all your project files under source control: it will avoid backup file messes and give you a good history of work. My recommendation is Git: it's what I use.
Submission
You should submit your materials (program, Makefile,
writeup) to the course website as a ZIP archive called
reaction.zip
. Use the assignment submission interface on
the course website to upload your archive.
Rubrics
Total 100 points - Makefile 20 points - Program 50 points - Writeup 30 points