# Course - Imperative Programming I and II HT23

> Source: https://ollybritton.com/notes/uni/prelims/ht23/ip/ · Updated: 2025-09-30 · Tags: uni, course

> This course was the first "standard" programming course, following from [Course - Functional Programming MT22](https://ollybritton.com/notes/uni/prelims/mt22/functional-programming/), although they did decide to use [Scala](https://www.scala-lang.org/) as the programming language of choice. There are whispers of a time long ago when they taught the course using [Oberon](https://oberon.org/en) which is even more obscure.
> <br>
> The first part of the course was about making formal proofs on the behaviour of imperative programs using a technique called [Notes - Imperative Programming HT23, Invariants](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/invariants/), and proving the correctness of algorithms like binary search this way.
> <br>
> The second part of the course mainly focused on abstract data types and implementing different data structures like [Notes - ADS HT24, Binary search trees](https://ollybritton.com/notes/uni/part-a/ht24/ads/notes/binary-search-trees/). There was a lot of overlap with [Course - Design and Analysis of Algorithms HT23](https://ollybritton.com/notes/uni/prelims/ht23/daa/).

- [Course Webpage](https://www.cs.ox.ac.uk/teaching/courses/2022-2023/imperativeprogramming1/)
- [Course Materials](https://www.cs.ox.ac.uk/teaching/materials22-23/imperativeprogramming1/)
- Predecessor to: [Course - Imperative Programming III TT23](https://ollybritton.com/notes/uni/prelims/tt23/ip/imperative-programming-iii/)
- Significant overlap with: [Course - Design and Analysis of Algorithms HT23](https://ollybritton.com/notes/uni/prelims/ht23/daa/)
- Previous programming course: [Course - Functional Programming MT22](https://ollybritton.com/notes/uni/prelims/mt22/functional-programming/)
- Other courses this term: [Courses HT22](https://ollybritton.com/notes/uni/prelims/ht23/)

### Notes
- [Notes - Imperative Programming HT23, Abstract data types](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/abstract-data-types/)
- [Notes - Imperative Programming HT23, Binary search trees](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/binary-search-trees/)
- [Notes - Imperative Programming HT23, Bit maps](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/bit-maps/)
- [Notes - Imperative Programming HT23, Hash tables](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/hash-tables/)
- [Notes - Imperative Programming HT23, Invariants](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/invariants/)
- [Notes - Imperative Programming HT23, Linked lists](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/linked-lists/)
- [Notes - Imperative Programming HT23, Misc](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/misc/)
- [Notes - Imperative Programming HT23, Object-oriented programming](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/object-oriented-programming/)
- [Notes - Imperative Programming HT23, Priority queues](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/priority-queues/)
- [Notes - Imperative Programming HT23, Scala](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/scala/)
- [Notes - Imperative Programming HT23, Testing](https://ollybritton.com/notes/uni/prelims/ht23/ip/notes/testing/)

### Problem Sheets
- [x] [Sheet 1](https://courses.maths.ox.ac.uk/pluginfile.php/25591/mod_assign/introattachment/0/Analysis%20II%20Sheet%201.pdf?forcedownload=1)
- [x] [Sheet 2](https://courses.maths.ox.ac.uk/pluginfile.php/25592/mod_assign/introattachment/0/Analysis%20II%20Sheet%202.pdf?forcedownload=1)
- [x] [Sheet 3](https://courses.maths.ox.ac.uk/pluginfile.php/25593/mod_assign/introattachment/0/Analysis%20II%20Sheet%203.pdf?forcedownload=1)
- [x] [Sheet 4](https://courses.maths.ox.ac.uk/pluginfile.php/25594/mod_assign/introattachment/0/Analysis%20II%20Sheet%204.pdf?forcedownload=1)
- [x] [Sheet 5](https://courses.maths.ox.ac.uk/pluginfile.php/25595/mod_assign/introattachment/0/Analysis%20II%20Sheet%205.pdf?forcedownload=1)
- [x] [Sheet 6](https://courses.maths.ox.ac.uk/pluginfile.php/25596/mod_assign/introattachment/0/Analysis%20II%20Sheet%206.pdf?forcedownload=1)
- [x] [Sheet 7](https://courses.maths.ox.ac.uk/pluginfile.php/25597/mod_assign/introattachment/0/Analysis%20II%20Sheet%207.pdf?forcedownload=1)
- [x] [Sheet 8](https://courses.maths.ox.ac.uk/pluginfile.php/25598/mod_assign/introattachment/0/Analysis%20II%20Sheet%208.pdf?forcedownload=1)

### Lectures
#### Part I
- [Lecture - Imperative Programming, I](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/lecture-imperative-programming-i/)
- [Lecture - Imperative Programming HT23, II](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/ii/)
- [Lecture - Imperative Programming HT23, III](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/iii/)
- [Lecture - Imperative Programming HT23, IV](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/iv/)
- [Lecture - Imperative Programming HT23, V](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/v/)
- [Lecture - Imperative Programming HT23, VI](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/vi/)
- [Lecture - Imperative Programming HT23, VII](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/vii/)
- [Lecture - Imperative Programming HT23, VIII](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/viii/)
- [Lecture - Imperative Programming HT23, IX](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/ix/)

#### Part II
- [Lecture - Imperative Programming HT23, X](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/x/)
- [Lecture - Imperative Programming HT23, XI](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xi/)
- [Lecture - Imperative Programming HT23, XII](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xii/)
- [Lecture - Imperative Programming HT23, XIII](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xiii/)
- [Lecture - Imperative Programming HT23, XIV](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xiv/)
- [Lecture - Imperative Programming HT23, XV](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xv/)
- [Lecture - Imperative Programming HT23, XVI](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xvi/)
- [Lecture - Imperative Programming HT23, XVII](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xvii/)
- [Lecture - Imperative Programming HT23, XVIII](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xviii/)
- [Lecture - Imperative Programming HT23, XIX](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xix/)
- [Lecture - Imperative Programming HT23, XX](https://ollybritton.com/notes/uni/prelims/ht23/ip/lectures/xx/)

### Problem Sheets
- [Sheet 1](https://www.cs.ox.ac.uk/teaching/materials22-23/imperativeprogramming1/sheet1.pdf)
- [Sheet 2](https://www.cs.ox.ac.uk/teaching/materials22-23/imperativeprogramming1/sheet2.pdf)
- [Sheet 3](https://www.cs.ox.ac.uk/teaching/materials22-23/imperativeprogramming1/sheet3.pdf)
- [Sheet 4](https://www.cs.ox.ac.uk/teaching/materials22-23/imperativeprogramming1/sheet4.pdf)
- [Sheet 5](https://www.cs.ox.ac.uk/teaching/materials22-23/imperativeprogramming1/sheet5.pdf)
- [Sheet 6](https://www.cs.ox.ac.uk/teaching/materials22-23/imperativeprogramming1/sheet6.pdf)

---
Olly Britton — https://ollybritton.com. Machine-readable index: https://ollybritton.com/llms.txt
