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

Cvičení C++ v pondělí 14h v SU2
(!) Poznámky k zápočtovému testu a zkouškám (!)

Kontakt

Mattermost -> 2324ZS -> nprg041-cpp-klepl

Pro více viz slajdy z prvního cvičení.

(!) Náplň cvičení a obsah slajdů je živý materiál a může se v průběhu semestru měnit. (!)

Podmínky udělení zápočtu

Pro více viz slajdy z prvního cvičení.

V průběhu semestru budou zadány ještě další 3 domácí úkoly, které jsou dobrovolné (a velmi doporučené), ke kterým dostanete zpětnou vazbu.

Sylabus

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

Zadání příkladů a úkolů najdete ve slajdech daných cvičení. Neúplnosti v zadáních dospecifikujte sami dle uvážení.

# Datum Slajdy Zdrojáky Probíraná témata Příklady (lab work) Domácí úkoly
1 2. 10. 2023 data/slides/lab-01.pptx data/slides/lab-01.pdf data/sources/hello-user.cpp
  • Organizace cvičení, podmínky zápočtu
  • vývojové prostředí a nástroje (GIT)
  • základní I/O
Hello, user (Nepovinný) --
2 9. 10. 2023 data/slides/lab-02.pptx data/slides/lab-02.pdf data/sources/nasobilka.cpp
  • Enkapsulace stavu
  • předávání argumentů
  • std::array, std::vector, std::span
Násobilka --
3 16. 10. 2023 data/slides/lab-03.pptx data/slides/lab-03.pdf
https://cunicz-my.sharepoint.com/:v:/g/personal/47842680_cuni_cz/EeqyS7-KQEdNnRGsguhdArIBQiyRyAgVQ7Y0-9wkpUjZJQ https://cunicz-my.sharepoint.com/:v:/g/personal/47842680_cuni_cz/ESTOAN75XvJCkOg7bjr27acBbpzSQeQKzI0OJBoFu2NnTA?e=goY1cA
data/sources/bst.cpp
  • C/C++ stringy a std::string_view, práce s chary
  • memory management, RAII a vlastnictví (+ std::move, std::swap)
  • Raw pointery, std::unique_ptr, std::shared_ptr
  • std::fstream, std::stringstream
  • std::pair, std::tuple, std::tie, structured binding
Řetězcový BST Zadání #1: link Počítání oveček
4 23. 10. 2023 data/slides/lab-04.pptx data/slides/lab-04.pdf data/sources/containers/CMakeLists.txt data/sources/containers/containers.cpp
data/sources/containers/sequential.cpp data/sources/containers/multimap.cpp data/sources/containers/map_translations.cpp
  • std::unique_ptr<T[]>, std::shared_ptr<T[]>
  • UB: Undefined Behavior
  • STD kontejnery a iterátory
  • Práce s kontejnery
Práce s kontejnery --
5 30. 10. 2023 data/slides/lab-05.pptx data/slides/lab-05.pdf data/sources/algorithms/sorting.cpp data/sources/algorithms/algorithms.cpp
  • Třídění
  • Standardní adaptéry
  • STD algoritmy
  • Funktory a lambdy
Práce s algoritmy Deadline #1
Zadání #2: link Polynomy v kontejnerech
6 6. 11. 2023 data/slides/lab-06.pptx data/slides/lab-06.pdf https://gitlab.mff.cuni.cz/teaching/nprg041/klepl/cmake-project
  • Práce s chybami: assertions, atributy, výjimky
  • Build systémy: CMake, vcpkg; externí dependence
  • Testování: Catch2
CMake projekt s 3rd-party závislostmi (Nepovinný) --
7 13. 11. 2023 data/slides/lab-07.pptx data/slides/lab-07.pdf data/sources/dynamic/CMakeLists.txt data/sources/dynamic/expressions.cpp data/sources/dynamic/expressions1.hpp data/sources/dynamic/expressions2.hpp
  • Dynamický (runtimový) polymorfismus
  • Rule of 5, konstruktory/destruktory
  • Virtuální metody a destruktory
  • Double dispatch
  • (Přetypovávání) casty
Interpret výrazů 1 Deadline #2
Zadání #3: link Matematická analýza
8 20. 11. 2023 data/slides/lab-08.pptx data/slides/lab-08.pdf data/sources/static/CMakeLists.txt data/sources/static/expressions.cpp data/sources/static/static.md data/sources/static/deque.cpp data/sources/static/deque.cpp data/sources/static/deque_out.txt
  • Statický polymorfismus
  • Šablony: function, class, alias, variable
  • Implicitní templaty s auto
  • std::variant, std::visit, std::optional, std::any
Interpret výrazů 2 --
9 27. 11. 2023 data/slides/lab-09.pptx data/slides/lab-09.pdf data/sources/doc data/sources/doc/README.md
  • 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
Kontrola linků v markdown dokumentaci (Nepovinný) Deadline #3
10 4. 12. 2023 data/slides/lab-10.pptx data/slides/lab-10.pdf Příklady z minula (deque, 9)
  • C++ ranges
  • templates 2.0
  • C++ concepts
--- Zadání #4: link (non)functional language
11 11. 12. 2023 data/sources/parsing/tokenizer.cpp data/sources/parsing/regex_tokenizer.cpp data/sources/parsing/parser.cpp Příklady z minula (deque, 9),
slajdy
  • Práce s regulárními výrazy
  • Parsování: (p(re|ost)|in)fix
  • AST: ukázka z minula
  • Problémy v kódu (možná i ukázka clang-tidy, gdb)
Načetí parsování Deadline #4, dostanete zpětnou vazbu
12 18. 12. 2023 --- --- Příprava na testy Dokončení parsování (na stránkách už napůl hotovo) Druhý deadline #4, opět zpětná vazba
do zápočtového testu můžete doladit
-- -- -- -- -- Nový rok -- -- --
13 8. 1. 2024 -- -- Zápočtový test Rozšíření úkolu #4 Připravte si úkol #4

Důležité termíny

17. 11. 2023 Odsouhlasit téma zápočťáku - stručný popis, libovolnou formou komunikace
30. 11. 2023 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
4. 12. 2024 Zadání úkolu #4 na ReCoDexu
11. 12. 2024 První deadline úkolu #4 na ReCoDexu
18. 12. 2024 Poslední deadline úkolu #4 na ReCoDexu
8. 1. 2024 Zápočtový test (rozšíření úkolu #4)
~ leden 2024 Opravný zápočtový test
19. 1. 2024 Dodat technologické demo zápočťáku se všemi third-party libkami, které jde pohodlně sestavit
30. 4. 2024 Odevzdání hotového zápočtového programu

GitLab

Zápočtový program

Převzato z https://www.ksi.mff.cuni.cz/teaching/nprg041-web/zapocet.html.

Témata zápočtových programů

Seznam některých zápočtových programů z minulých let

2D fyzikální engine
Adventure guild manager
Akordy
Algebraicky multigrid
Analyza toniny z audia
Analyzér barvy hlasu
Arbitraze sazek
Auticka
Bang!
Bioinformatické metody - proteiny
Bug Tracker
Cachovaci upload server
Canasta
Cardmaster
Casticovy engine 
Chips challenge game
DHT-like P2P
Detekce a zpracování proudu obrázků
Detekce kolizi
Distribuované úložiště dat
Dots and Boxes (P2P, AI)
Duna 2 (strat game)
Emulace rescue robotu 
Engine pro ekonomickou RT strategii
Generovani krajiny
Generovani pseudorealnych stromu
GeoSol the embedded GPS problem solver
Grafovy editor
Graph analysis
Graph matching
Hanabi AI (game)
Hra Caylus 
Infrastruktura pro generování a uchovávání klíčů
Instant messaging
Integrator a vyhledavac jizdnich radu
Interpret Forth / Scheme / ...
Interpret geometrickeho jazyka
Jazyk pro matematicky popis grafu a jejich kresleni
Kompilátor imperativního jazyka
Letadlo nad terenem
MIDI klavir s transpozici a Synthesii
Magic: The Gathering engine
Maly dratenik
Map-Reduce Engine
Monopoly
Motivacni strategie
Obecne multisudoku s prekryvajicimi se ctverci
Ogre bludiste
OneEye (zaznamenávání partie go z obrázků)
Ostrovy a sopky
Particle engine
Pazaak (Karetni hra)
Ping Pong Delay
Piškvorky++ s nestandardními topologiemi
Planovaci kalendar
Pokemoni online
Predzpracovani astro pozorovani
Prehravac not s frekvencni analyzou
Prekladac Pascal -> C
Prescoboj - pseudosachy
Primy prenos videa s prepinanim zdroju
Real-time strategie
Rescue roboti
Rizeni letoveho provozu
Roboticke sitovani
Rozpoznavani obliceju
Rpg
Rychly batch-processing fotek plavajicich castic
Sazec textu
Segmentace obrazu 
Sitova strilecka
Social desktop client
SovereignPlay
Stack Attack
Star wars
Střílečka s inteligencí
Synchronizator souboru
Tanky na 3D cestach
Vesmirna strilecka
Vlacek
World of Warcraft bot
Zavody auticek