Programming in C++

Labs, Friday 10:40–12:10, SU2, Malá Strana, 2025


:email: Contact

  • Office: Room S203, 2nd floor
  • Mattermost: ulita.ms.mff.cuni.cz/mattermost
    • Channel: 2526/nprg041-cpp-faltin
    • DM: @faltin.tomas
  • Email: tomas.faltin@matfyz.cuni.cz

:information_source: General Information

:calendar: Important Dates

Date Milestone Details Submission
14.11.2025 Topic proposal DM on Mattermost
12.12.2025 Approved detailed description Written in Markdown Merge request
13.02.2026 First technology demo
22.05.2026 Final version

:bangbang: Do not leave this until the last minute! Iteration takes time.

:test_tube: Individual Labs

Latest slides: pdf

Lab Date Goals Code Homework
01 03.10. Compilation, debugging, IDE, I/O redirection, cmd args, vector, string by 09.10. 5:00: Calculator (+/-)
02 10.10. Parameters, class, struct, const functions, vector by 16.10. 5:00: 3D matrix
03 17.10. Covered by J.Klepl
04 24.10. using, const/constexpr, ownership, special methods implement_class_c.cpp, counting_class.cpp, verbose_class.cpp by 30.11. 5:00: Implement class C (1p), 3D matrix (2p)
05 31.10. Declaration, definition, sequence containers, iterators summing_program.cpp by 6.11. 5:00: Summing program (1p), N-in-row game (3p)
06 07.11. owners, observers, dynamic allocation, pointers, pointer arithmetic linked_list.hpp by 13.11. 5:00: linked-list (1p), vector<int> (2p)
07 14.11. std::function, functors, lambdas, algorithms   by 20.11. 5:00: People big-data DB (2p)
08 21.11. Survey results, inheritance, polymorphism   by 27.11. 5:00: polymorphic vector (1p)
09 28.11. templates, concepts*   by 4.12. 5:00: make generic containers: (poly-)vector, linked-list, matrix (each 1p)
10 05.11. exceptions, noexcept, RAII, std::optional, std::expected exceptions.cpp by 11.12. 5:00: make all previous containers (poly-)vector, linked-list, matrix (each 1p) properly handling exceptions
11 12.11.      
12 19.11.      
13 09.01.      
01* 01.01. Covering for J. Klepl, slides    

:white_check_mark: Merge Requests in GitLab

For each homework, submit your solution through a Merge Request (MR). This allows me to review your code and provide comments.

  1. Create a separate branch, e.g, hw1-solution for your homework: git checkout -b hw1-solution
  2. Add you solution and push your new branch to Gitlab
  3. Open a Merge Request
    • Go to you Gitlab project in browser and click: Merge Requests/Create merge request.
    • Select Source branch: hw1-solution, Target Branch: master
    • Add a title, optional description, set @faltint as Assignee, and click Create merge request

:trophy: Credit Project

See Credit Information Page for details.

Framework for Finding a Project Idea

Understanding & Curiosity

  • What system or concept do you want to deeply understand?
    Examples: OS, compilers, networking, ML pipelines.
  • Is there a technology you’ve always wondered about internally?
    Examples: Blockchain, Docker, game engines.

Technology & Tools

  • What libraries or frameworks does your domain rely on?
    Examples: OpenMP, MPI, LLVM, TensorFlow.
  • Could you integrate multiple libraries for something new?

User-Centered Design

  • Ask peers: What tasks frustrate them?
  • Automate repetitive tasks or improve incomplete tools.

Innovation & Improvement

  • Combine two ideas into something new.
  • Implement a research algorithm practically.
  • Create interactive learning tools.

Scalability & Performance

  • Design for large data or parallel processing.
  • Optimize for speed, memory, or energy.

Social Impact & Accessibility

  • Improve accessibility for people with disabilities.
  • Make complex tools easier for beginners.