Programming in C++

Programování v C++

NPRG041

2020/2021

David Bednárek

2/2

Warning (particularly to Erasmus students)

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.

Distance learning

The lectures in English will be pre-recorded and made available off-line in the form of a .pptx file containing audio (this allows for easy rolling back/forth) or a normal video. See the section Timetable below for more information.

The timetable slot for the lecture (Tuesday 15:40) may be used for discussions, if needed.

The tutorials will be on-line using ZOOM, as specified by the timetable:

Mon 17:20 Kratochvíl (starting Oct 5) 98218652618

The ZOOM passcode is placed at the SIS Notice-board related to NPRG041, accessible to all logged-on SIS users.

For questions and discussions, a SLACK channel #nprg041-cpp-english was created for this course on parg-mff.slack.com. You need an invite-link to join this SLACK workspace - the link is placed at the SIS Notice-board related to NPRG041, accessible to all logged-on SIS users.

The time (Thursday 15:40) reserved for the lecture in the faculty timetable may be used for questions and answers using zoom ID 97051664617. Zoom passcode is the same as for the tutorials, placed at the SIS Notice-board.

Distanční výuka

Distanční výuka bude probíhat primárně na platformě zoom.

Přednášky budou probíhat v rozvrženém čase (úterý 14:00) pod zoom ID 96691563912. Zoom passcode je uveden na Nástěnce předmětu v SISu (pro přihlášené uživatele). Přednášky budou nahrávány, odkazy na nahrávky budou umístěny v sekci Průběh přednášky níže.

Účast na online cvičení se předpokládá v termínech stanovených rozvrhem. Podrobnější informace k jednotlivým skupinám cvičení a příslušná zoom ID:

Út 12:20 Kratochvíl 99909474901
Út 15:40 Husák 99296875087
St 15:40 Zavoral 98175502606
St 15:40 Faltín 97317355782
Čt 9:00 Bednárek 94596134714
repetenti 1.10. 17:20 98175502606

Zoom passcode je shodný s přednáškou - uveden na Nástěnce předmětu v SISu (pro přihlášené uživatele).

Pro účely dotazů (a odpovědí) na témata probíraná na přednášce a na cvičeních jsou vytvořené kanály na parg-mff.slack.com. Odkaz na přihlášení je v modulu SISu Nástěnka. Tyto kanály budou používány i pro hromadná oznámení, proto je doporučeno se přihlásit a kanály určené pro vaše předměty/skupiny sledovat.

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

Slides from 2019/20 are available in one PowerPoint or PDF file.

For 2020/21, the slides will be updated and split into sections corresponding to individual lectures. Each lecture will be published as a PowerPoint file containing slides, a PDF file containing the same slides, a narrated PowerPoint file containing slides and an audio track for each slide, and a video file made from the narrated PowerPoint file.

The pre-recorded videos are available in the channel NPRG041 English. When signing in for the first time, enter the email kzr@cuni.cz, you will be redirected to the Charles University authentication system where you sign in using your SIS login and password.

Obrázky z přednášek

Slajdy z roku 2019/20 jsou k dispozici vcelku jako PowerPoint nebo PDF.

Doplňkové slajdy především o propojení C-C++ - PowerPoint.

Pro rok 2020/21 budou slajdy průběžně aktualizovány rozděleny do sekcí odpovídajících jednotlivým přednáškám.

Záznamy z přednášek jsou k dispozici v kanále NPRG041 Czech. Při prvním přihlášení zadejte email kzr@cuni.cz, budete přesměrováni na CAS UK.

Timetable

Grey background indicates previous-year contents mapped to this year. The dates are intended only as a prediction when the corresponding slides/videos will be published. The numbers are slide numbers in the previous-year files.

The narrated pptx and videos will appear here as soon as prepared.

Date Slides Video Topics
2020/10/1 Pros and cons of C++. Compilation and header files.
2020/10/8 Hello, world. Modules, declarations and definitions, references.
2020/10/15 Values, pointers, references.
2020/10/22 Passing arguments and returning by value and by reference, copy/move semantics, copy/move elision.
2020/10/29 Copy/move semantics, the Rule of Five. Pointers, smart pointers, observers.
2020/11/5 73 81 References vs. pointers, conventions. array/struct/vector.
2020/11/12 82 94 Smart pointer examples. Containers.
2020/11/19 95 106 Containers, iterators, range-for-loop.
2020/11/26 Algorithms, functors, lambda.
2020/12/3 Class, inheritance, virtual methods.
2020/12/10 Special methods, conversions, casts.
2020/12/17 Templates. Storage classes, stack frames, address space.
2021/1/7 Variadic templates, forwarding references. Introduction to exceptions.

Průběh přednášky

Datum Slajdy Video Témata
29.9.2020 Výhody a nevýhody C/C++. Kompilace, hlavičkové soubory, dělení do modulů.
6.10.2020 Hello, world. Předávání hodnotou a odkazem.
13.10.2020 Předávání parametrů a vracení hodnotou a odkazem, lvalue a rvalue reference.
20.10.2020 Reference, fyzická a logická konstantnost, obvyklé chyby, copy/move-elision
27.10.2020 Lvalue/rvalue, copy/move metody. Rule-of-Five.
Předtočená přednáška
(3.11.2020)
Dynamic allocation, smart pointers, observers. Konvence používání ukazatelů a referencí. Arrays vs. vectors, smart pointers vs. containers.
10.11.2020 91 101 Kontejnery, iterátory, range-for-loop. Algoritmy, funktory, lambda.
24.11.2020 102 107 std::function. Class. Class vs. namespace.
1.12.2020 Dědičnost. Speciální metody, konverze, přetypování.
8.12.2020 Šablony.
15.12.2020 Kompilace. Hlavičkové soubory, dělení do modulů, statické a dynamické knihovny. Storage classes, stack frames, code/data segments, heap.
22.12.2020 Variadické šablony, forwarding references.
5.1.2021 Výjimky.

Poznámka: Šedé pozadí označuje průběh z minulého roku namapovaný na letošní data. Dva číselné sloupce jsou čísla slajdů v loňské verzi.