Programming in C++.

Lectures: Tuesday 16-18, Room 140.
Laboratory: Tuesday 18-20, Thursday 10-12

On Friday June 27th, there is lab from 10.15 to 11.30 in room 137.


Knowledge of programming in C or Python. During the exercises, I will be using Linux in lab 137 or 07.
I will explain the basics of Linux in the first lecture. You don't need advance knowledge but you must be willing to learn it.


C++ is a language that starts at low level, but which is designed in such a way that programmer can build high-level components. When you are working on a large project, you build your components, and after that do not use the low-level features anymore in the rest of the project. If you are joining an existing project or using libraries, you probably never have to deal with the low-level aspects of the language. If you are working on a large project, and after half a year still doing low-level programming, then you are doing something wrong. The bad reputation of C++ is caused by programmers and teachers that never manage to leave the low-level programming.


Role of Laboratories

The laboratory has two goals which are somewhat in conflict with each other: I have to teach you, and I have to check/grade you. The balance between them depends on how much effort I believe you put in when you made the task.

It is better that you come at the beginning of the lab: If everyone comes at the end, I will not be able to check (and improve, see above) your programs. Therefore, come at the beginning. I give you a task for next week at the beginning, so that you don't have to waste your time while waiting. Another advantage of working/starting in the lab is that you can ask questions.

Tasks must be shown on a Linux computer. My experience is that in Windows, the integrated environments are not standard conforming, use most of the screen area for showing all the fancy options of the integrated environment instead of code, error messages and output. In windows, it it hard to check for memory leaks, etc. Windows is designed in such a way that the user has no control over the computer. The main decisions are taken by the programs, that have too much freedom to do what they like. As a consequence, you don't know where your files are stored, what are the access rights, what programs are being installed, what programs are running and how much resources they are using, what data is being sent over the internet to whom, etc. Since this is a non-acceptable situation for a professional, we will use Linux.

If you bring your own laptop, try to read the screen from 1 meter distance under an angle of 45 degrees. If you cannot, you should use the computers in the lab.

Useful Sites


  1. Exercise number 1. Basics of Linux. Example of a makefile.
  2. Exercise number 2. You need the following files: Makefile, rational.h, rational.cpp, vector.h, matrix.h, matrix.cpp, assert.h, main.cpp.
  3. Exercise number 3.
  4. Exercise number 4.
  5. Number 5 . You need the files in nr05.
  6. Exercise 6. The main containers of STL (vector and list). Use of iterators.
  7. Exercise 7 about map and unordered_map.
  8. Exercise 8 about solving the 15-puzzle, using unordered_map and priority_queue. You need these files. On 22-24.04, there is no lab.
  9. Exercise 9 about inheritance.
  10. Exercise 10 about templates.
  11. Exercise 11 about polymorphic functions. .
  12. Exercise 12 about Conway's Game of Life. You need these files. (The printed version had the rules wrong.)


There were 12 exercises. Every exercise is good for 10 points. This means that there are 120 points in total. Exercises 1,2,3,4,5 must be made in all cases. Grades are obtained from the points as follows:

70 => 3.0
80 => 3.5
90 => 4.0
100 => 4.5
110 => 5.0