NPRG041 - Programování v C++ | cvičení Jiří Klepl

Cvičení C++ ve středu 14:00 (SU2)

Obsah

Kontakt

Možnosti komunikace (od nejrychlejší po nejpomalejší): Ozvěte se kdykoliv, když:

Podmínky udělení zápočtu (stručně)

Pro detailnější informace, navštivte hromadnou stránku cvičení.

Příklady ze cvičení

Cvičení

Náplň se může v průběhu semestru měnit!

# Datum Slajdy Probíraná témata Zdrojáky k úkolům Soubory ze cvičení Úkoly (lab work)
1 1. 10. 2025
  • Úvod do předmětu
  • Editor, kompilátor, debugger
  • Mattermost, GitLab, ReCodEx
  • C++ program a jeho sestavení, spuštění
  • Typické typy: int, std::string, std::vector, pointery
  • Textový vstup a výstup (std::cin, std::cout, std::cerr)
  • Command line argumenty
  • Předávání parametrů funkcím
Kalkulačka (0 bodů)
2 8. 10. 2025 lab-02.pdf lab-02.pptx
  • Hodnotová a odkazová (referenční) semantika, C++ není Java
  • Cykly, pole: std::vector vs std::array vs T[]
  • std::span
  • Práce s textem: std::string, std::string_view
  • File streamy
  • Práce se znaky
stats:
main.cpp
Hello World:
main.cpp hello.hpp hello.cpp
stats (3 body)
3 15. 10. 2025 lab-03.pdf lab-03.pptx
  • Modularita, objekty
  • Vlastnictví a RAII
  • Pointery, reference
  • Raw pointery, std::unique_ptr, std::shared_ptr
  • std::move
  • std::swap
bst (kostra):
bst.cpp
Začátek možné implementace
bst.hpp
bst (3 body)
4 22. 10. 2025 lab-04.pdf lab-04.pptx
  • Sekvenční kontejnery: std::vector, std::list
  • Asociativní kontejnery: std::map, std::set, std::unordered_map, std::unordered_set
  • Iterátory
  • Práce s kontejnery
Minipříklad na práci s iterátory:
miniexcercise.cpp
Operátory a práce s kontejnery:
operators.cpp
dictionary (6 bodů)
5 29. 10. 2025 lab-05.pdf lab-05.pptx
  • Třídění
  • Funktory, lambda funkce
  • Algoritmy: std::sort, std::find, std::accumulate, ...
  • Speciální iterátory: std::back_inserter, std::inserter, std::ostream_iterator
algorithms: algorithms.cpp
user data: user_data.cpp
algorithms:
algorithms.cpp
still dictionary...
algorithms (1 bod)
6 5. 11. 2025 lab-06.pdf lab-06.pptx
  • Dědičnost
  • Dynamický polymorfismus: virtual, override, final
  • Overloading funkcí, operátorů
  • The Rule of Three, The Rule of Five, The Rule of Zero
expression (kostra):
expression.hpp main.cpp
expression (2 body)
7 19. 11. 2025 lab-07.pdf lab-07.pptx
  • Cast: C-style, static_cast, dynamic_cast, const_cast, reinterpret_cast
  • Parsování
  • Varianty: std::variant, std::visit
  • std::optional, std::expected
expression (kostra):
expression.hpp main.cpp
expression-some_code.hpp expression - s parsováním a castěním/variantama (3 body)
8 26. 11. 2025 lab-08.pdf lab-08.pptx
  • Statický polymorfismus
  • Šablony tříd, funkcí
C++ Fraction<T> (2 body)
9 3. 12. 2025 lab-09.pdf lab-09.pptx
  • Práce ⚒️ s filesystemem 📁 přes std::filesystem
  • Regulární výrazy 😐 - stručně
  • Formátování textu přes std::format
  • Měření času s chrono ⏱️
  • Random ukázka :)
doc.zip / doc.tar.gz main.cpp link-checker (3 body)
10 10. 12. 2025 lab-10.pdf lab-10.pptx
  • Iterátory
  • Ranges
  • (Concepts)
fib.hpp Godbolt Fibonacci range/iterator (2 body)
11 17. 12. 2025 lab-11.pdf lab-11.pptx
  • Vyjímky (zžumpy), noexcept, std::exception, std::runtime_error, std::logic_error
  • RAII
  • assert, static_assert
  • std::move, std::swap
  • Tooling: Clang-Tidy, AddressSanitizer, ...
assertions ("rozšíření" expression)
12 7. 1. 2026 lab-12.pdf lab-12.pptx
  • CMake
  • find_package
  • FetchContent
  • vcpkg
dvd (bouncing DVD logo)

Důležité termíny

20. 11. 2025 Odsouhlasit téma zápočťáku - stručný popis
30. 11. 2025 Dodat specifikaci zápočťáku - 3rd party libraries, interface (CLI, GUI, ...), podrobný popis funkcionality
3rd party libraries musí být schváleny předem, specifikace v GitLabu
19. 2. 2026 Dodat technologické demo zápočťáku, které jde pohodlně sestavit se všemi third party knihovnami; zápočťák by měl buďto využívat vcpkg, nebo (drobnější a často header-only knihovny) automaticky stáhnout a sestavit přes CMake (pomocí FetchContent). Program nemusí být kompletně funkční, měl by ale obsahovat plánované UI/API a využívat všechny plánované knihovny, aby šlo ověřit, že je celá konfigurace správně nastavená. Program by měl naznačovat plánovanou strukturu (rozdělení na hlavní moduly/objekty) a rozhraní. Samozřejmě ale, tato struktura může být v průběhu vývoje dále upravována.
15. 5. 2026 Odevzdání hotového zápočtového programu a jeho programové a uživatelské dokumentace
Zkouškové období 2026 Poslední možnost odevzdání opraveného zápočťáku

GitLab