Exercise 8 of the first year software workshop module at the University of Birmingham.