Programming in C++

Programování v C++

NPRG041

2020/2021

David Bednárek

2/2

Distance examination

Students shall register to one of the examination dates published in SIS.

All the terms are bilingual (English and Czech).

For the examination, you will need a computer equipped with Zoom and your preferred C++ development environment. You must be able to share the windows of your development tools via Zoom->Share Screen. In addition, you will need a microphone and a camera connected to Zoom (at the same computer if possible).

Students may also use drawing to explain their ideas - Zoom->Share Screen->Whiteboard will be the preferred shared-drawing environment.

The examination will follow this scheme:

  • At the specified starting time of the exam, the assignment will be published at a webpage and explained via zoom (if there are English students registered, the explanation will be in English or there will be sessions in both languages, possibly by two examiners in parallel).
  • You will be given an appropriate amount of time (3 to 4 hours) to work on the assignment.
    • Individual work is strictly required. Any violation of this rule will result in failing the exam for all persons involved.
    • You may use any static information publicly available (i.e. any website that does not react to your input except for searching), like a C++ documentation or FAQ. If you copy code or design from any source, you must identify the source (e.g. by comments in the code).
    • Except for some assignments, you will be given (effectively) unlimited attempts to verify the functionality of your code using Recodex.
  • Students may place questions using the private Chat of Zoom, addressed to the examiner in charge. Students are also advised to observe the public Chat which may be used by the examiners for corrections to the assignment and other announcements.
  • When done (or when the deadline passed), you will pass your code to the examiners (usually by marking the solution as "final" in Recodex).
    • Don't discuss the assignment or your code with anyone, even after you handed your code to the examiners. Your examination is formally running continuously until you are awarded a grade.
  • An examiner will review your code as soon as possible. The examiner may also test your code with additional inputs (not available in recodex).
    • If your code is considered incomplete or wrong AND the deadline has not yet passed, you may be sent back to the individual-work phase and given a chance to submit an improved solution within the original deadline.
  • After the review, you will be asked some questions related to your code and/or asked to change the behavior of the code in a specified way.
    • In this part of the exam, you are expected to start answering immediately.
  • When the examiner is satisfied (or when the time slot allocated for your answers is consumed), you will be awarded a grade.
    • In dubious or border-line cases, the examiner may consult other co-examiners for grading.

The connection information will be published later.

The ZOOM passcode is the same as for all the lectures (placed at the SIS Notice-board related to NPRG041, accessible to all logged-on SIS users).

Distanční zkoušení

Studenti se registrují ke zkušebním termínům v SISu jako obvykle.

Ke zkoušce budete potřebovat počítač s funkčním Zoomem a libovolným vývojovým prostředím pro C++. Musíte být schopni sdílet okna vývojových nástrojů pomocí Zoom->Share Screen. Dále budete potřebovat mikrofon a kameru připojenou k Zoomu (pokud možno na témže počítači).

Studenti mohou své myšlenky vysvětlovat i pomocí kreslení - preferovaná technologie je Zoom->Share Screen->Whiteboard.

Zkouška bude probíhat podle tohoto schématu:

  • V čase začátku příslušného termínu bude zadání zveřejněno na webu a poté vysvětleno pomocí Zoomu.
  • Po zadání dostanete přiměřený čas (3 až 4 hodiny) na vypracování řešení.
    • Úloha musí být řešena striktně individuálně. Jakékoliv porušení tohoto pravidla povede k výsledku Neprospěl pro všechny, kdo se na porušení podíleli.
    • Můžete použít jakoukoliv veřejně dostupnou statickou informaci (tj. libovolné webové stránky, které nereagují na vstup uživatele jinak než vyhledáváním), např. dokumentaci k C++ nebo FAQ. Pokud zkopírujete kód nebo design z libovolného zdroje, musíte zdroj uvést (např. komentářem v kódu).
    • U většiny zadání budete mít k dispozici (efektivně) neomezený počet pokusů pro ověření řešení v Recodexu.
  • Otázky pokládejte pomocí privátního Chatu v Zoomu, adresované příslušnému zkoušejícímu. Doporučuje se rovněž sledovat public Chat, který může být použit zkoušejícími pro upřesnění zadání a další oznámení.
  • Až budete hotovi (nebo až uplyne stanovený čas), předáte zdrojový kód řešení zkoušejícím (označením řešení v Recodexu za "finální").
    • Nediskutujte zadání nebo řešení s nikým (kromě zkoušejících), a to ani po odevzdání. Zkouška formálně trvá do té doby, dokud nedostanete známku.
  • Zkoušející prohlédne odevzdaný kód, jakmile to bude možné. Zkoušející také může otestovat funkčnost dalšími vstupy (které nebyly nakonfigurovány v Recodexu).
    • Pokud zkoušející bude považovat odevzdaný kód za neúplný nebo špatný A ZÁROVEŇ ještě neuplynul určený termín odevzdání, můžete být vráceni zpět do fáze individuální práce s možností odevzdat další řešení, až do uplynutí původního termínu.
  • Po prohlédnutí či otestování řešení zkoušející položí studentovi několik otázek týkajících se odevzdaného kódu, případně jej požádá o modifikaci chování kódu.
    • V této části zkoušky se předpokládá, že studenti budou odpovídat bez přípravy.
  • Jakmile bude zkoušející spokojen (nebo pokud uplyne čas přidělený pro doplňující otázky), sdělí studentovi udělenou známku.
    • V nejasných případech může zkoušející hodnocení konzultovat s ostatními zkoušejícími.

Připojovací údaje a případné další technické detaily budou publikovány později.

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

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.

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 exam may 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 part Exam0..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 Zkoušku 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šky Zkouška0..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

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 References vs. pointers, conventions. Containers, iterators.
2020/11/12 Algorithms, functors, lambda.
2020/11/19 Classes, inheritance, virtual methods.
2020/11/26 Visitor pattern, std::variant.
2020/12/3 Conversions. Templates, forwarding references.
2020/12/10 Variadic templates. Introduction to exceptions.
2020/12/17 Because many of the videos are longer than a 90 min lecture, they already cover all the time alloted to the lectures as well as the syllabus of the course. There will be no more English videos.
2021/1/7

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 Kontejnery, iterátory, range-for-loop. Algoritmy.
24.11.2020 Funktory, lambda, std::function.
1.12.2020
(offline)
Class vs. namespace. Dědičnost.
8.12.2020 Dědičnost. Visitor.
15.12.2020 std::variant. Typové konverze. Šablony.
22.12.2020 Šablony, forwarding references, variadické šablony. Výjimky.
5.1.2021 Výjimky.