e-x-a.org » NPRG041 C++ programming (cs/en) 2016/17

Infopage about the C++ lab of NPRG041.

  • Taught by: Miroslav Kratochvil, contact: exa.exa@gmail.com (please include the course name/code in the subject)
  • Meeting point: MS MFF, fall semester 2017
    • English group: every Tuesday at 17:20 in SW1
    • Czech group: every Wednesday at 10:40 in SW2
  • Reading material:
  • When in any doubt, mail me.

Lab requirements

To get the credit, you have to attend the course reasonably (at least accordingly to your knowledge of the topic), do the homework (see below) and finish an individual project (also below).

You will be assigned several points for finishing the homework. These will be added to the points from the final test, therefore improving your final grade for the whole course.

Depending on many factors, students from Erasmus programs may need a completely different set of rules to fit into different time limits. *If you are an ERASMUS student, contact us!*


There will be 2 assignments. Details will be announced in early November.


Each student has to create an individual project and submit it to get the credit. Topic is variable, but should be discussed and agreed upon before the end of November. Size of the project is not an issue and largely depends on the topic, but at least around 500 lines of (neat) C++ code is a good guideline.

Bad topics:

  • Boring libraries
  • Boring games
  • Anything that does not behave C++-ish (e.g. code without a single class construction)
  • Anything that requires complicated or very specific user interface (e.g. bank account simulator, unless the interface is solved neatly in some novelty C++ way)
  • Anything that has 100000 implementations already hanging around the internet
  • Also, there’s already too many of checkers, worms, tetris, pacman, snake, tictactoe, etc.

Good topics:

  • Small fast games (fun!)
  • Convenience programming libraries (convenient!)
  • Convenient data structures with demos (useful!)
  • Physics-like simulations of something (collisions etc. are cool)
  • Compilers, transpilers, virtual machines, typecheckers or interpreters for small programming languages.


  • Topic agreed upon, written down in SIS: November 30th, 2017. Send me an e-mail to make sure the topic is confirmed and added to SIS.
  • “Beta” version showing some work done: March 31st, 2018
  • Final version incl. documentation: May 15, 2018

Lab timeline

Week 1 (2015/10/3,4)

Introduction to (and necessity of) C and low-level programming in general. What do the compiler and linker do. Pointed magic.

Bonus material

  • The Art Of UNIX Programming (online version) by E.S.Raymond is a brilliant material not only about the origins of current computing practice and the C programming language (that emerged together with UNIX and gave rise to C++), but also contains almost all of the most important insights about software development gained in last 50 years. Surprisingly, all of them still apply. Sometimes a bit philosophical. If you are developing a large system (or a part of some) for the first time, this book will tell you what design mistakes you are almost certainly going to make, what are they called, and how to avoid them.