C++ Programming WS2017/2018

Important news

25.01.2018 - Final Project

The final project will be made available tomorrow (26.01.2018). Furthermore, the tasks to solve will be discussed in detail in tomorrows lecture.

02.11.2017 - Using functions from 'cmath'

When using functions from the 'cmath' header file, you have to tell your compiler to link against the math library using '-lm' at the end of the compiler command, otherwise you will get 'unresolved reference' errors. An example call: clang++ -std=c++14 -Wall program_using_cmath.cpp -lm

16.10.2017 - Unique IDs

Every student should have received an email with their unique ID. I could not decrypt five email addresses because of bad handwriting. In case you do not have received your ID yet, please send me an email.

12.10.2017 - First lecture

The first lecture will take place on Friday, 13.10.17 at 16:00 in D1. There will be no exercise class in the first week.

19.09.2017 - Registration

You will be able to register to this course from 02.10. to 21.10.

07.09.2017 - Issues should have been fixed

Please register to the course in PAUL: C++ Programming (L.079.08504). The rooms for the lectures and exercises will be determined during next week.

06.09.2017 - Issues with the PAUL system

Currently there are some issues in the PAUL system which prevent some students from registering to this course. This course will definitely take place in the upcoming semester. The issues will be fixed as soon as possible. Please try to register again by Friday or next week.

Course material

The slides and exercise sheets will be uploaded on this page.


























sheet_09/ bonus





















The gtest framework example showed in the exercises: gtest_example.zip

For details please refer to: https://github.com/google/googletest/blob/master/googletest/docs/Primer.md


Compiler builtins for over-/ underflow detection:

    VirtualBox machine image containing an Ubuntu OS with different C++ compilers (gcc, clang) and development environments (VS Code, Eclipse and many more) pre-installed: cppp_machine.ova (caution the virtual machine image comes as a 5.2 GB compressed file, the uncompressed file is approx. 12 GB).

    In order to run the virtual machine (or computer), that is contained in the cppp_machine.ova file, you have to install VirtualBox first. For the installation please download the Virtual Box plattform package for your corresponding operating system (and install it). You probably want to install the VirtualBox Extentsion Pack as well. Once VirtualBox is installed you can run it. Import the virtual computer contained in the .ova file: In the 'File' menu of VirtualBox please choose 'Import Appliance' and follow the instructions. After having successfully imported the machine you should be able to start it and a new window with the Ubuntu OS booting should pop up. The password for the machine will be given in the first lecture. (You do not have to set up things in advance, it is part of the first exercise.)

    Simple Makefile project: SimpleProject.zip

    A more advanced Makefile project: AdvancedProject.zip

    Both Makefile example projects are contained in the 'Documents/' directory of the virtual machine.

    Final Project


    The project description can be found here: cppp_final_project.pdf

    The compressed sequence files and a small python script for plotting the results can be found here:

    The project description will be discussed in detail (including an example on the board) in the 13th lecture at 26.01.2018.

    You can use the file homo_sapiens_chr1_GRCH38.p7.fas to test the performance of your sequence-reading function. Use the sequences in sox3.fas and sry.fas for the actual comparison. If you are able to get a python interpreter installed on your system, you can plot the results of your program with help of the plotSMSresults.py script. Otherwise you can use any spreadsheet-programm like MS Excel or Libre Office to create scatter plots from your results in csv format.

    Hand in your solutions by email until 31.03.2018 (23:59:59). Your hand-in must contain the following: your full name, your subject of study and your faculty for creating the certificates, the complete source code of your implementation and a compiler-command-line of how your program must be compiled (ideally a Makefile, but not mandatory).

    If you have any problems solving the project whatsoever, do send me an email and I will help you. We can also have a meeting in person at my office if necessary.

    Plotting your results using the provided python script should produce plots similar to the above (above without postprocessing, below with postprocessing).

    Time and place

    The teaching language will be English, but questions in German will be permitted.


    Fri 16:00-17:30 at D1

    Exercise classes:

    Fri 14:15-15:45 at D1

    Schedule of the exercise class might change depending on the majority rule.

    Registering and asking questions

    You have to register in the PAUL system in order to attend the course.

    Please feel free to ask questions during the exercises or send mail.


    C++ is a general purpose programming language and one of the most popular languages for both systems programming and application programming. The language allows you to write programms close to the metal and gives the programmer full control over the systems resources but C++ includes decent mechanisms for abstractions as well. Another observation is that programms written in C++ often result in highly efficient machine code, since the language maps very well to the von Neumann architecture. These are just a few characteristics of the language which make it to be in great demand.

    The more recent standards like C++11, C++14 and C++17 (often called modern C++) provide new powerful mechanisms and concepts that make programming in this language a lot easier than a few years ago.

    During this course you will learn the basics (and probably a bit more) about modern C++ which provides a powerful tool for solving problems.


    The C++ programming language is taught from scratch, so students without any programming background are welcome!


    During the winter semester, we are going to study the following concepts in C++ programming:

    Background and basic introduction:

    • history of C and C++
    • programming enviroments
    • basic terms / concepts

    Basic C++ programming:

    • primitive variable types
    • expressions / statements
    • functions
    • memory management / pointers / arrays
    • structures / unions / enumerations
    • strings / vectors
    • classes
    • smart pointers / move semantics

    The C++ standard template library (STL):

    • IO library
    • containers
    • generic algorithms

    Advanced techniques:

    • operator overloading
    • template programming
    • object-oriented programming
    • embarrassing parallel: OpenMP

    Useful libraries for further projects:

    • common used C++ libraries

    Learning outcomes

    After having attended this course, students might obtain following benefits:

    • understand modern C++
    • be confident to take advanced courses that require C++ programming
    • the ability to easily realize elegant programming tasks/ projects
    • promoted from a C programmer to a state-of-art C++ programmer
    • the ability to develop a real object-oriented program
    • gain additional understanding of how a computer works
    • better understanding of (computationally) problems
    • know where to find the desired information to realize a challenging task on your own

    Useful literature

    [1] A Tour of C++, Stroustrup 2013 (overview)

    [2] The C++ Programming Language (4th Edition), Stroustrup 2013 (details)

    [3] C++ reference: http://en.cppreference.com (reference)

    [4] C++ Tutorial: http://www.cplusplus.com/doc/tutorial/ (a nice tutorial)

    [5] CppCon experts sharing their knowledge: https://www.youtube.com/user/cppcon (really advanced concepts)


    There will be weekly exercise sheets. The aim of the exercise sheets is to deepen your knowledge and your understanding of the C++ programming language. You need to achieve at least 50% of all points to be admitted to the final (small) project.

    In the final project you have to create a small command-line application which implements a useful algorithm. During the project you will make use of the previous learned contents.

    The weekly exercise classes (see above) serve the following purposes: present the solution of the previous exercise sheet, answer questions and give some hints for the current exercise sheet.

    If you have questions to the organization of the course, the topic, to the exercises or you get stuck during solving the exercises, please contact me via email. I try to answer as soon as possible.