Programming in C++.

Lectures: Tuesday 16-18, Room 141.
Laboratory: Tuesday 18-20, Room 7

Prerequisites

Experience in one programming language, e.g. C, Java or Python. Exercises must be shown on Linux computers in lab 07 or 137. YOU MUST BE WILLING TO USE LINUX! This is an overview of the basic commands of Linux.

Introduction

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.

Schedule

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

Exercises

  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.
  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 vector and list, and polymorphism.
  8. Number 8 about std::map and std::unordered_map.
  9. Number 9 about alternative ways of passing comparators and hash functions to maps.
  10. Exercise 10 about solving the 15-puzzle, using unordered_map and priority_queue. You need these files.
  11. Exercise 11 about templates. You need these files.
  12. Exercise 12 about inheritance.

Grading

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