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() and srandom() C library functions, to produce random problems. Note that you can get a random digit via random() % 10.

  • The getpid() C library function, to get a "seed" value for srandom(), 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