Programming in C++.

Lecture: Wednesday 16-18, Sal 25.
Laboratory (Hans de Nivelle): Wednesday 18-20, Sal 7
Laboratory (Marek Szykuła): Tuesday 16-18, Sal 110
Laboratory (Marek Szykuła): Tuesday 18-20, Sal 110
Laboratory (Jan Otop): Friday 10-12, Sal 7


Experience in at least one programming language, e.g. C, Java or Python.

Further Conditions


C++ is a language that starts at low level, but which is designed in such a way that a programmer can build high-level components inside the language. 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 escape from 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.

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, main.cpp.
  3. Exercise number 3.
  4. Exercise number 4. You need these additional files.
  5. Number 5. You need the files in nr05.
  6. Number 6. You need the files in nr06. This exercise changed quite a lot since last year!
  7. Number 7 about usage of vector in a matching algorithm. You need the files in nr07. This exercise is different from last year.
  8. Number 8 about std::map and std::unordered_map.
  9. Exercise 9 about solving the 15-puzzle, using unordered_map and priority_queue. You need these files.
  10. Exercise 10 about templates. You need these files.
  11. Exercise 11 about inheritance.
  12. Exercise 12 about Conway's Game of Life. You need these files.

Grading 2016

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