## Přehled

Tento předmět sestává z cvičení, sad domácích úloh a závěrečného
praktického testu (kolokvia). Protože se jedná o „programovací“
předmět, většina práce v předmětu – a tedy i jeho hodnocení – se
bude zaměřovat na praktické programování. Je důležité, abyste
programovali co možná nejvíce, ideálně každý den, ale minimálně
několikrát každý týden. K tomu Vám budou sloužit příklady v této
sbírce (typicky se bude jednat o velmi malé programy v rozsahu
jednotek až desítek řádků, kterých byste měli být v průměru schopni
vyřešit několik za hodinu) a domácí úlohy, kterých budou za semestr
3 sady, a budou znatelně většího rozsahu (maximálně malé stovky
řádků). V obou případech bude v průběhu semestru stoupat náročnost –
je tedy důležité, abyste drželi krok a práci neodkládali na poslední
chvíli.

Protože programování je těžké, bude i tento kurz těžký – je zcela
nezbytné vložit do něj odpovídající úsilí. Doufáme, že kurz úspěšně
absolvujete, a co je důležitější, že se v něm toho naučíte co
nejvíce. Je ale nutno podotknout, že i přes svou náročnost je tento
kurz jen malým krokem na dlouhé cestě.

### Probíraná témata

Předmět je rozdělen do 4 bloků (čtvrtý blok patří do zkouškového
období). Do každého bloku v semestru patří 4 kapitoly (témata) a
jim odpovídající 4 cvičení.

│ bl. │     │ téma                                  │
├─────│────▻┼◅──────────────────────────────────────│
│  1  │  1. │ funkce, jednoduché hodnoty, reference │
│     │  2. │ složené hodnoty                       │
│     │  3. │ vlastní metody a operátory            │
│     │  4. │ životní cyklus hodnot, vlastnictví    │
│┄┄┄┄┄│┄┄┄┄┄│┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄│
│  2  │  5. │ ukazatele                             │
│     │  6. │ dědičnost, pozdní vazba               │
│     │  7. │ výjimky, princip RAII                 │
│     │  8. │ lexikální uzávěry, další operátory    │
│┄┄┄┄┄│┄┄┄┄┄│┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄│
│  3  │  9. │ součtové typy                         │
│     │ 10. │ knihovna algoritmů                    │
│     │ 11. │ řetězce                               │
│     │ 12. │ vstup a výstup                        │
│┄┄┄┄┄│┄┄┄┄┄│┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄│
│  –  │ 13. │ bonusy, opakování                     │

### Organizace sbírky

V následujících sekcích naleznete detailnější informace a «závazná»
pravidla kurzu: doporučujeme Vám, abyste se s nimi důkladně
seznámili.¹ Zbytek sbírky je pak rozdělen na části, které odpovídají
jednotlivým týdnům semestru. «Důležité:» během prvního týdne
semestru už budete řešit přípravy z první kapitoly, přestože první
cvičení je ve až v týdnu druhém. Nulté cvičení je volitelné a není
nijak hodnoceno.

Kapitoly jsou číslovány podle témat z předchozí tabulky: ve druhém
týdnu semestru se tedy «ve cvičení» budeme zabývat tématy, ke kterým
jste v prvním týdnu vypracovali a odevzdali přípravy.

¹ Pravidla jsou velmi podobná těm v kurzu IB111, ale přesto si je
  pozorně přečtěte.

### Plán semestru

Tento kurz vyžaduje značnou aktivitu během semestru. V této sekci
naleznete přehled důležitých událostí formou kalendáře. Jednotlivé
události jsou značeny takto (bližší informace ke každé naleznete
v následujících odstavcích tohoto úvodu):

 • „#X“    – číslo týdne v semestru,
 • „cv0“   – tento týden běží „nulté“ cvičení (kapitola B),
 • „cv1“   – tento týden probíhají cvičení ke kapitole 1,
 • „X/v“   – mezivýsledek verity testů příprav ke kapitole X,
 • „X/p“   – poslední termín odevzdání příprav ke kapitole X,
 • „sX/Y“  – Yté kolo verity testů k sadě X,
 • „sX/z₁“ – první kolo známek za kvalitu kódu sady X,
 • „sX/op“ – termín pro opravná odevzdání sady X,
 • „sX/z₂“ – finální známky za kvalitu kódu sady X,
 • „test“  – termín programovacího testu.

Nejdůležitější události jsou zvýrazněny: termíny odevzdání příprav a
poslední termín odevzdání úloh ze sad (obojí vždy o 23:59 uvedeného
dne).

│                             únor                             │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │   Po  │   Út  │   St  │   Čt  │   Pá  │   So  │   Ne  │
├─────▻│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│
│   #1 │ 19    │ 20    │ 21    │ 22    │ 23    │ 24    │ 25    │
│ cv 0 │       │       │       │ 01/v  │       │«01/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│   #2 │ 26    │ 27    │ 28    │ 29    │       │       │       │
│ cv 1 │ s1/1  │       │ s1/2  │ 02/v  │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│


│                            březen                            │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │   Po  │   Út  │   St  │   Čt  │   Pá  │   So  │   Ne  │
├─────▻│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│
│   #2 │       │       │       │       │ 1     │ 2     │ 3     │
│      │       │       │       │       │ s1/3  │«02/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│   #3 │ 4     │ 5     │ 6     │ 7     │ 8     │ 9     │ 10    │
│ cv 2 │ s1/4  │       │ s1/5  │ 03/v  │ s1/6  │«03/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│   #4 │ 11    │ 12    │ 13    │ 14    │ 15    │ 16    │ 17    │
│ cv 3 │ s1/7  │       │ s1/8  │ 04/v  │ s1/9  │«04/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│   #5 │ 18    │ 19    │ 20    │ 21    │ 22    │ 23    │ 24    │
│ cv 4 │ s1/10 │       │ s1/11 │ 05/v  │«s1/12»│«05/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│   #6 │ 25    │ 26    │ 27    │ 28    │ 29    │ 30    │ 31    │
│ cv 5 │ s2/1  │       │ s2/2  │ 06/v  │ s2/3  │«06/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│


│                            duben                             │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │   Po  │   Út  │   St  │   Čt  │   Pá  │   So  │   Ne  │
├─────▻│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│
│   #7 │ 1     │ 2     │ 3     │ 4     │ 5     │ 6     │ 7     │
│ cv 6 │ s2/4  │ s1/z₁ │ s2/5  │ 07/v  │ s2/6  │«07/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│   #8 │ 8     │ 9     │ 10    │ 11    │ 12    │ 13    │ 14    │
│ cv 7 │ s2/7  │ s1/op │ s2/8  │ 08/v  │ s2/9  │«08/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│   #9 │ 15    │ 16    │ 17    │ 18    │ 19    │ 20    │ 21    │
│ cv 8 │ s2/10 │ s1/z₂ │ s2/11 │ 09/v  │«s2/12»│«09/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│  #10 │ 22    │ 23    │ 24    │ 25    │ 26    │ 27    │ 28    │
│ cv 9 │ s3/1  │       │ s3/2  │ 10/v  │ s3/3  │«10/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│  #11 │ 29    │ 30    │       │       │       │       │       │
│ cv10 │ s3/4  │ s2/z₁ │       │       │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│


│                            květen                            │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │   Po  │   Út  │   St  │   Čt  │   Pá  │   So  │   Ne  │
├─────▻│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│
│  #11 │       │       │ 1  sv │ 2     │ 3     │ 4     │ 5     │
│      │       │       │ s3/5  │ 11/v  │ s3/6  │«11/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│  #12 │ 6     │ 7     │ 8  sv │ 9     │ 10    │ 11    │ 12    │
│ cv11 │ s3/7  │ s2/op │ s3/8  │ 12/v  │ s3/9  │«12/p» │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│  #13 │ 13    │ 14    │ 15    │ 16    │ 17    │ 18    │ 19    │
│ cv12 │ s3/10 │ s2/z₂ │ s3/11 │       │«s3/12»│       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │ 20    │ 21    │ 22    │ 23    │ 24    │ 25    │ 26    │
│      │       │       │       │       │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │ 27    │ 28    │ 29    │ 30    │ 31    │       │       │
│      │       │ s3/z₁ │       │       │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│


│                            červen                            │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │   Po  │   Út  │   St  │   Čt  │   Pá  │   So  │   Ne  │
├─────▻│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│◅──────│
│      │       │       │       │       │       │ 1     │ 2     │
│      │       │       │       │       │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │ 3     │ 4     │ 5     │ 6     │ 7     │ 8     │ 9     │
│      │       │ s3/op │       │       │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │ 10    │ 11    │ 12    │ 13    │ 14    │ 15    │ 16    │
│      │       │ s3/z₂ │       │ test  │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │ 17    │ 18    │ 19    │ 20    │ 21    │ 22    │ 23    │
│      │       │       │       │ test  │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
│      │ 24    │ 25    │ 26    │ 27    │ 28    │ 29    │ 30    │
│      │       │       │       │ test  │       │       │       │
│┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│┄┄┄┄┄┄┄│
