Overview
This course applies lessons that have been learnt in Functional Programming to the design of
programs written in a procedural style. By studying a sequence of programming examples,
each a useful software tool in its own right, students learn to construct programs in a
systematic way, structuring them as a collection of modules with well-defined interfaces.
The course also deals with the translation of functional programs into procedural ones,
and introduces the idea of loop invariants for understanding and reasoning
about loops.
The course concludes with the study of a larger programming
example, such as a graphical program for finding the best route for driving between
specified towns in the UK. Through lab exercises, students learn to create, debug and
maintain programs of a non-trivial but moderate size.
Learning Outcomes
After studying this course, undergraduates will be able to:
- Translate basic functional idioms into procedural ones.
- Design simple loops, using invariants to explain why they work correctly
- Use subroutines and modules to structure more complex programs.
- Design data structures using arrays, records and pointers.
- Understand the procedural implementation of some common algorithms.