Programming in C++

Programování v C++

NPRG041

2021/2022

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]

Warning (particularly to Erasmus students) - before you enroll to this course

This course assumes that all participants already acquired some experience in programming, understanding of object-oriented programming, and basic knowledge of C# or Java. If you are a beginner in programming, you shall not enroll. If your experience covers only python, PHP, JavaScript, Pascal, FORTRAN, or similar languages, you may expect problems understanding some parts of the lecture.

For regular students of Computer Science, this assumption is covered by the prerequisities of the subject.

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 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, můžete očekávat problém s porozuměním některým částem přednášky.

Pro pravidelné studenty programu Informatika je tento předpoklad zajištěn prerekvizitami předmětu.

Communication

For communication on all aspects of this course, please use Mattermost. (Your emails are often classified as junk.)

For the first logging-in, you will need an invite-link, placed in the Notice-board module in the SIS. (This invite link is valid for several courses that share the same Mattermost team 2122ZS for this semester.)

The channel nprg041-cpp-english is dedicated to the English lecture and labs. All the channels are intended for communication between teachers and students, as well as related discussions between students. In addition, you may use direct messages for non-public communication.

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 2122ZS pokrývající několik předmětů vyučovaných v ZS 2021/22.)

Tohoto předmětu se týkají kanály nprg041-cpp pro přednášku a obecné dotazy v češtině, nprg041-cpp-[teacher] 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 diskusím mezi studenty týkajícím se předmětu. Pro neveřejnou komunikaci použijte direct messages.

Distance learning

The labs and lectures will take place in classrooms with simultaneous transmission via Zoom or MS Teams. The connection link is available in Mattermost and the Notice-board module of SIS.

Distanční výuka

Česká verze přednášky je od 7.12.2021 živě vysílána pomocí Zoom. Odkaz pro připojení je v Mattermostu a jako "Vzkaz přihlášeným studentům" v rozvrhovém lístku přednášky.

Pro české verze cvičení žádná distanční výuka neprobíhá.

Labs

Thursday 12:20 SW2 Faltín

Cvičení

Po 12:20 SW2 Bednárek
St 12:20 SU2 Zavoral
St 12:20 SW2 Svoboda
Čt 9:00 SW2 Šmelko
Pá 10:40 SU2 Drozdík
Pá 12:20 SW2 Husák
repetenti 30.9. 17:20 S7

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 may be repeated three times in accordance with study regulations, the last result is counted.

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

Homework #1 0..15 points Delay penalty: -5 points per each week (even if partial)
Homework #2 0..25 points Delay penalty: -10 points per each week (even if partial)
Exam 0..60 points 50 points for a completely functional solution, +/- 10 points for the quality of source code

Final grading:

60 points 3
75 points 2
90 points 1

Lab credit: at least 35 points (including the points from the exam) 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šku lze v souladu se studijními předpisy opakovat třikrát, počítá se poslední výsledek.

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

Domácí úkol č. 1 0..15 bodů -5 bodů za každý započatý týden zpoždění
Domácí úkol č. 2 0..25 bodů -10 bodů za každý započatý týden zpoždění
Zkouška 0..60 bodů 50 bodů za plně funkční řešení, +/- 10 bodů za kvalitu zdrojových textů

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ň 35 bodů (včetně bodů ze zkoušky) 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

Timetable

Date Slides Video
2021/22
Video
2020/21
Topics
2021/09/30 N.A. Pros and cons of C++. Compilation and header files.
2021/10/7 N.A.
Hello, world. Modules, declarations and definitions, references.
2021/10/14
Values, pointers, references.
2021/10/21
Passing arguments and returning by value and by reference, copy/move semantics, copy/move elision.
2021/11/4
2021/11/11
Copy/move semantics, the Rule of Five. Pointers, smart pointers, observers.
2021/11/18
2021/11/25
References vs. pointers, conventions. Containers, iterators.
2021/12/2
2021/12/09
Algorithms, functors, lambda.
2021/12/16
2022/01/6 Classes, inheritance, virtual methods. Conversions.
Additional slides
2020 Visitor pattern, std::variant.
Templates, forwarding references. Variadic templates.
Introduction to exceptions.

Průběh přednášky

Datum Slajdy Video
2021/22
Témata
5.10.2021 N.A. Výhody a nevýhody C/C++. Kompilace, hlavičkové soubory, dělení do modulů.
12.10.2021 N.A.
Hello, world. Předávání hodnotou a odkazem.
19.10.2021
Hodnoty, ukazatele, reference.
26.10.2021
L-value a R-value reference. Copy/move. Předávání parametrů a vracení hodnotou a odkazem, fyzická a logická konstantnost.
2.11.2021
9.11.2021 Copy/move-elision, lvalue/rvalue, copy/move metody. Rule-of-Five.
16.11.2021
Dynamic allocation, smart pointers, observers. Konvence používání ukazatelů a referencí. Arrays vs. vectors, smart pointers vs. containers.
23.11.2021
30.11.2021 Kontejnery, iterátory, range-for-loop. Algoritmy.
7.12.2021
Funktory, lambda, std::function.
14.12.2021
Class vs. namespace. Dědičnost.
21.12.2021
4.1.2022 std::variant.
Výjimky.
Doplňkové slajdy (bude probráno v rámci NPRG051 Pokročilé programování v C++)
2020 Visitor.
Šablony, forwarding references, variadické šablony.