Programming in C++

Programování v C++

NPRG041

2018/2019

David Bednárek

2/2

Rules governing lectures, exams, labs and credits

There will be two homework assignments; your lab teacher is responsible for the assignment, deadline, and evaluation. Late submission without serious cause will be penalized.

The exam consists of two parts: a compulsory practical part in the laboratory and an optional oral part. The practical part will be held in the examination period in terms listed in the SIS. The practical part can be repeated three times in accordance with study regulations, the last result is counted. The oral part is held at request of the student on the date agreed with the examiner.

The final score is based on the total number of points earned as follows:

Homework #10..15 pointsDelay penalty: -5 points per each week (even if partial)
Homework #20..25 pointsDelay penalty: -10 points per each week (even if partial)
Practical part0..60 points50 points for a completely functional solution, +/- 10 points for the quality of source code
Optional oral part-10..+10 pointsAt least 50 points from the previous parts required for admission.

Final grading:

60 points3
75 points2
90 points1

Lab credit: at least 50 points and a software project on a theme previously agreed with the lab teacher. Lab credit is not required for admission to the exam.

Pravidla pro přednášky, zkoušky, cvičení a zápočty

V rámci cvičení budou zadány dva domácí úkoly; jejich zadání a vyhodnocení je v kompetenci příslušného cvičícího. Pozdní odevzdání bez závažného důvodu bude penalizováno.

Zkouška má dvě části: Povinnou praktickou část v laboratoři a nepovinnou ústní část. Praktická část bude konána ve zkouškovém období v termínech vypsaných v SIS. Praktickou část lze v souladu se studijními předpisy opakovat třikrát, počítá se poslední výsledek. Ústní část se koná na žádost studenta v termínu určeném dohodou se zkoušejícím.

Výsledné hodnocení je určeno na základě celkového počtu bodů získaných takto:

Domácí úkol č. 10..15 bodů-5 bodů za každý započatý týden zpoždění
Domácí úkol č. 20..25 bodů-10 bodů za každý započatý týden zpoždění
Praktická část zkoušky0..60 bodů50 bodů za plně funkční řešení, +/- 10 bodů za kvalitu zdrojových textů
Nepovinná ústní část zkoušky-10..+10 bodůPodmínkou pro připuštění k ústní části je získání alespoň 50 bodů z předchozích částí hodnocení.

Výsledné hodnocení zkoušky:

60 bodůDobře
75 bodůVelmi dobře
90 bodůVýborně

Podmínkou udělení zápočtu je získání alespoň 50 bodů a odevzdání zápočtového programu na téma předem dohodnuté s cvičícím. Udělení zápočtu není podmínkou k připuštění ke zkoušce.

Pravidla pro repetenty

Slides

PowerPoint

PDF

Part C

The slides may be updated during the semester.

Obrázky z přednášek

PowerPoint

PDF

Část C

Obrázky z přednášek se mohou během celého semestru mírně aktualizovat.

Timetable

2018/10/1121Pros and cons of C++. Compilation and header files.
2018/10/82235Compilation and header files. Hello, world. String, vector.
2018/10/153650Relevant principles of computers. Numeric types, physical representation of arrays and structures.
2018/10/225160Number, enumeration and character types. C-style strings, std::string, std::string_view.
2018/10/296164Passing arguments and returning by value and by reference, related error scenarios.
7375,78Storage classes, stack frames, address space.
2018/11/58790Storage classes, dynamic allocation. Pointers, smart pointers, observers. References. Move semantics.
2018/11/129199Memory layout of simple containers. Copy/move semantics, the Rule of Five.
2018/11/19100109References vs. pointers, conventions.
2018/11/26110115References, conventions, copy-elision, const.
149150Class, inheritance, virtual functions.
2018/12/03151161Inheritance.
2018/12/10162182Special methods, conversions, casts. Containers.
2018/12/17183201Iterators, algorithms. Functors, lambda
2019/1/7Templates, variadic templates.

Note: Gray background indicates previous-year contents mapped to this year.

Průběh přednášky

3.10.2018123Výhody a nevýhody C/C++. Kompilace.
10.10.20182442Hlavičkové soubory, dělení do modulů, statické a dynamické knihovny.
17.10.20184356Relevantní principy počítačů. Paměťová reprezentace elementárních typů, polí a struktur. Číselné typy.
24.10.20185766Enum, bool. Char a string, string_view.
31.10.20186770Předávání hodnotou a odkazem, obvyklé chyby.
79,81,82,84,89Storage classes, stack frames, code/data segments, heap.
7.11.201890,94101Dynamic allocation, smart pointers, observers. Paměťová reprezentace základních kontejnerů.
14.11.2018102109Copy/Move, Rule-of-Five.
21.11.2018110116Reference. Konvence používání ukazatelů a referencí.
28.11.2018115121Předávání parametrů a vracení hodnotou a referencí. Getter/setter. Class. Class vs. namespace. Dědičnost.
5.12.2018143151Dědičnost.
12.12.2018154165Speciální metody, konverze, přetypování.
19.12.2018172194Kontejnery. Algoritmy, funktory, lambda.
9.1.2019Lambda. Šablony, variadické šablony.

Poznámka: Šedé pozadí označuje průběh z minulého roku namapovaný na letošní data.