Programování v C++

NPRG041

2024/2025

David Bednárek

Katedra softwarového inženýrství

C++ je v nějakých ohledech tak bizarní jazyk, že si říkám, že musí být mimozemského původu. [anketa 2021/22]

Varování

Předmět předpokládá u všech účastníků zkušenosti s programováním, porozumění objektově-orientovanému programování a základní znalost jazyka C (nebo C++) a C# nebo Java. Pokud jste v programování začátečník, nezapisujte se. Pokud máte zkušenosti pouze s jazyky jako python, PHP, JavaScript, Pascal nebo FORTRAN, budete mít problém s porozuměním některým částem přednášky.

Pro pravidelné studenty programu Informatika jsou tyto předpoklady zajištěny prerekvizitami předmětu.

Komunikace

Pro komunikaci s vyučujícími používejte přednostně Mattermost. (Vaše emaily bývají často považovány za spam.)

Pro první přihlášení budete potřebovat invite-link, který najdete na Nástěnce předmětu v SISu. (Tato pozvánka platí pro team 2324ZS pokrývající několik předmětů vyučovaných v ZS 2023/24.)

Tohoto předmětu se týkají kanály nprg041-cpp-[cvicici] pro cvičení daného vyučujícího a nprg041-cpp-repetenti pro repetenty. Všechny tyto kanály slouží pro komunikaci mezi vyučujícími a studenty i k diskusím mezi studenty týkajícím se předmětu. Pro neveřejnou komunikaci použijte direct messages.

Cvičení

Skupiny a pravidla pro cvičení a zápočty

Pravidla pro repetenty a studenty s rozloženým ročníkem

Přesné podmínky pro získání zápočtu stanoví příslučný cvičící. Hlavními podmínkami udělení zápočtu jsou

  • Zápočtový test - viz níže, nutný pro připuštění ke zkoušce
  • Zápočtový program - témata a termíny individuálně dohodnuty s cvičícím, finální verze typicky odevzdána během letního semestru

Zápočtový test a zkouška

Zápočtové testy i zkoušky se konají v počítačové laboratoři (S[UW][12]). V zájmu zajištění stejných podmínek musejí studenti používat pouze počítače instalované v laboratořích, v režimu Windows nebo Linux. Použití notebooků (nebo jiných výpočetních prostředků, které nejsou součástí laboratoře) během zkoušky není povoleno. Studenti nesmějí používat jiné zdroje než překladače, debuggery, editory a IDE instalované v laboratoři a referenční manuály k jazyku na stránkách cppreference.com nebo cplusplus.com. Před zápočtovým testem se ujistěte, že umíte pracovat s vývojovým prostředím instalovaným na počítačích v laboratořích.

Každý student musí pracovat samostatně.

Zápočtový test

V každé skupině bude během semestru zadán finální domácí úkol. Zápočtové testy studentů této skupiny budou založeny na rozšířené nebo upravené verzi tohoto finálního domácího úkolu, přičemž studentům bude při zápočtovém testu umožněno stáhnout si své řešení finálního domácího úkolu z recodexu a upravovat jej.

Zápočtový test bude trvat 90 minut včetně prezentace zadání a manipulace s recodexem, na samotné řešení úlohy tedy pravděpodobně nezbude více než 60 minut. Vypracovat celé řešení tohoto úkolu během zápočtového testu by bylo extrémně obtížné. Je tedy v zájmu každého studenta, aby před zápočtovým testem vytvořil (a vložil do recodexu) takové řešení finálního domácí úkolu, které svým provedením nezkomplikuje další úpravy a rozšíření funkčnosti.

Rozhodnutí o úspěšném splnění zápočtového testu bude založeno nejen na výsledku automatizovaných testů v recodexu, ale rovněž na posouzení zdrojových kódů příslušným cvičícím.

Na absolvování zápočtového testu má každý student dva pokusy.

Základní termín zápočtového testu se bude konat na posledním cvičení dané skupiny, tj. v posledním týdnu výuky.

Opravný termín zápočtového testu proběhne v první polovině zkouškového období. Opravný termín bude společný pro více skupin, každý student však dostane úlohu založenou na finálním domácím úkolu jeho skupiny. (Bude to však jiná verze než při základním termínu.)

Celkový počet vypsaných opravných termínů bude stanoven podle celkového počtu studentů neúspěšných při základních termínech. Pro danou skupinu však bude určen pouze jeden z těchto termínů.

Zkouška

Podmínkou připuštění ke zkoušce je úspěšné splnění zápočtového testu. Studenti, kteří splní zápočtový test až při opravném termínu, tak budou ochuzeni o možnost konání zkoušky v prvních týdnech zkouškového období.

Obsahem zkoušky je naprogramování zadané úlohy v časovém limitu 3,5 hodiny včetně odevzdání do systému recodex. Všichni studenti v daném termínu řeší tutéž úlohu.

Hodnocení zkoušky bude založeno nejen na výsledku automatizovaných testů v recodexu, ale rovněž na posouzení zdrojových kódů.

Zkoušku lze v souladu se studijními předpisy konat třikrát, počítá se poslední výsledek.

Všechny termíny zkoušek v SISu jsou smíšené česko-anglické. Zkoušky budou dozorovány různými vyučujícími, jméno zkoušejícího v SISu není relevantní.

Průběh přednášky 2023/24

Varování: Videa z předešlých let nemusejí pokrývat všechna aktuálně požadovaná témata.

Datum Slajdy Témata Video
2020/21
Video
2021/22
5.10.2023 1..17 Výhody a nevýhody C/C++. Kompilace, hlavičkové soubory, dělení do modulů. 09-29
12.10.2023 18..26
1..14 Hello, world. Předávání hodnotou a odkazem. 10-06
10-19
19.10.2023 1..12 Hodnoty, ukazatele, reference. 10-13
10-26
1..3 L-value a R-value reference. Copy/move. Předávání parametrů a vracení hodnotou a odkazem, fyzická a logická konstantnost. 10-20
26.10.2023 4..11 11-02
9.11.2023 11..20
10-27 11-09
1..8 Copy/move-elision, lvalue/rvalue, copy/move metody. Rule-of-Five.
16.11.2023 9..18 11-16
1..10 Dynamic allocation, smart pointers, observers. Konvence používání ukazatelů a referencí. Arrays vs. vectors, smart pointers vs. containers. 11-03
23.11.2023 11..15 11-23
1..9 Kontejnery, iterátory, range-for-loop. Algoritmy. 11-10
30.11.2023 10..18
1.. Funktory, lambda, std::function. 11-24
12-14
7.12.2023 1..13 Šablony, forwarding references, variadické šablony. 12-01
14.12.2023 14..18
1..14 Traits, policy classes, functors, tags.
21.12.2023 1.. Class vs. namespace. Dědičnost. 12-15
4.1.2024 ..31
1.. Výjimky.
11.1.2024 ..26
Doplňkové slajdy nepokryté přednáškami
1..4 std::variant. 12-08 12-21
1..12 Visitor. 12-22