Moderní programování v C++11
RNDr. Šimon Tóth
Moderní programování v C++11

Kapitola obsahuje:
3
Studijní text
Učitel doporučuje studovat od 24. 9. 2012 do 30. 9. 2012.

Kapitola obsahuje:
1
Video
2
Studijní text
Učitel doporučuje studovat od 1. 10. 2012 do 7. 10. 2012.
Týden 4
Učitel doporučuje studovat od 8. 10. 2012 do 14. 10. 2012.

Kapitola obsahuje:
2
Obrázek
2
Video
3
Studijní text
Učitel doporučuje studovat od 15. 10. 2012 do 21. 10. 2012.

Kapitola obsahuje:
5
Studijní text
Učitel doporučuje studovat od 22. 10. 2012 do 28. 10. 2012.

Kapitola obsahuje:
1
Studijní text
Učitel doporučuje studovat od 29. 10. 2012 do 4. 11. 2012.
Týden 8
Učitel doporučuje studovat od 5. 11. 2012 do 11. 11. 2012.
Týden 9
Učitel doporučuje studovat od 12. 11. 2012 do 18. 11. 2012.
Týden 10
Učitel doporučuje studovat od 19. 11. 2012 do 25. 11. 2012.
Týden 11
Učitel doporučuje studovat od 26. 11. 2012 do 2. 12. 2012.
Týden 12
Učitel doporučuje studovat od 3. 12. 2012 do 9. 12. 2012.
Týden 13
Učitel doporučuje studovat od 10. 12. 2012 do 16. 12. 2012.
Týden 14
Učitel doporučuje studovat od 17. 12. 2012 do 23. 12. 2012.

Týden 1

Lokace cvičení a organizační informace

Cvičení probíhají v kancelářích CESNETu v budově Gotexu, 3. poschodí.

Nejjednodušší cesta je:

  1. vstup přes hlavní vchod
  2. skrz dvůr
  3. vyjít po schodech na vrchní patro
  4. vejít přes dveře vlevo

Protože kanceláře CESNETu nejsou veřejně dostupné, budu vás muset pustit dovnitř. Proto prosím přijďte zavčas. 18:00 půjdu otevřít dveře. Jinak se prosím domluvte s někým kdo vás tam pustí.

Cvičení probíhá v místnosti bez počítačů. Je proto nutné mít notebook  s Linuxem (GCC 4.7). Práce dvojice na jednom notebooku je v pořádku.

Obsah cvičení a materiály pro samostudium

Pro toto cvičení nejsou k dispozici žádné materiály.

Na cvičení jsme si prošli obsah semináře a organizační záležitosti.

Zadání příkladu - Frekvence čísel

Implementujte následující program:

Program dostane na vstupu (může být jak soubor tak standardní vstup) seznam čísel.

Např:

10 231254 42 32 1 32 10 23

Program spočítá frekvence (počet výskytů) jednotlivých čísel a vypíše tuto informaci v přehledné tabulce.


Např:

2x 10
2x 32
1x 42
1x 1
1x 23
1x 231254

Pokud program dostane na příkazovém řádku parametr "<tt>--cifry</tt>" bude místo frekvence čísel počítat frekvenci cifer. Výstup opět vypíše v přehledné tabulce.

Např:

4x 3
6x 2
1x 5
2x 4
4x 1
2x 0

Vzorové řešení

Vzorové řešení jsem vám ukázal na cvičení. Na následujícím odkazu si můžete prohlédnout trochu čistější verzi s prvky C++11 https://gist.github.com/3768301

Týden 2

Na tomto cvičení si procvičíme několik jednodušších vlastností C++11.

  • klíčové slovo auto
  • klíčové slovo nullptr
  • automatické ukazatele
  • range for cyklus
  • funkce begin() a end()

Materiály ke samostudiu

Díky technickým problémům (sype se mi synchronizace videa a zvuku) bohužel zatím nejsou k dispozici videa. Budu se opravdu snažit je dodat ještě před cvičením.

Klíčové slovo auto:

Klíčové slovo nullptr:

Automatické ukazatele:

Range for cyklus, begin() a end():

Zadání příkladu - Strom

Navrhněte a implementujte datovou strukturu Strom.

  • pro uložení a manipulaci s prvky použijte možnosti C++11
    • chytré ukazatele
    • STL
  • implementujte na této struktuře metody begin() a end() aby ji bylo možné použít s range for-cyklem
  • strom naimplementujte jako univerzální datovou strukturu (šablona)
  • připravte pro strom několik operací
    • vstup a výstup v závorkovém formátu
    • suma
    • maximální hloubka listu
    • minimální hloubka listu
    • maximální hodnota
    • maximální hodnota na listech
    • průměrná hodnota
    • průměrná hodnota na listech
    • průměrná hodnota na maximální hloubce

Týden 3

Na tomto cvičení si probereme vlastnosti, které jsou poněkud více teoreticky náročné. Soustřeďte se prosím proto na přípravu.

  • uniformní inicializace
  • inicializační seznamy
  • lambdy
  • úvod do async
Zadání příkladu - Vylepšení stromu

Materiály k samostudiu

Týden 3 Zadání příkladu - Vylepšení stromu

Zadání příkladu - Vylepšení stromu

Obsah není zveřejněný.
Týden 4

Týden 4

Obsah není zveřejněný.

Týden 5

Tento týden si procvičíme asynchronní operace.

Kliknutím změníte název

Práce na cvičení

Volba šéfa na obousměrném kruhu - diskuze o algoritmu.

Volba šéfa na jednosměrném kruhu - implementace algoritmu.

Routovací tabulky - implementace algoritmu.

Týden 6

Obsah cvičení

Tento týden nebudeme probírat novou látku, ale procvičíme si již probrané koncepty na generování fraktálů.

  • Mandelbrotův fraktál má velmi jednoduchý vzorec, nicméně jeho naivní výpočet je velmi náročný na CPU.
  • Vaším úkolem bude připravit paralelní variantu algoritmu, která bude schopna využít více jader.

Pomocný kód:

https://gist.github.com/3940039

Vzorová řešení

Vzorové řešení volby šéfa na jednosměrném kruhu https://gist.github.com/3921334

První část vzorového řešení stromu https://gist.github.com/3929158

Zadání domácích úkolů

Oficiální zadání domácích úkolů. Strom má deadline 26.10. 2012 23:59:59. Routing má deadline 29.10. 2012 23:59:59. Odevzdávejte na toth@fi.muni.cz.

Strom

Implementujte datovou strukturu reprezentující obecný strom.

Základní popis

Připravte datovou strukturu schopnou reprezentovat strom (můžete vyjít ze vzorového řešení první části). Datová struktura musí být schopná reprezentovat obecný strom (bez omezení množství potomků na uzlech). Strom by měl umožňovat efektivní oprace přidávání, odebírání a přehazování uzlů.

Implementační požadavky

Kde je to možné používejte STL a chytré ukazatele. Výpočetní operace které jde paralelizovat implementujte pomocí asynchronních prvků C++11.

Výpočetní operace

  • suma
    • součet hodnot uzlů (podle sémantiky vnitřního datového typu)
  • maximální hloubka
    • maximální hloubka stromu (kořen má hloubku 1)
  • minimální hloubka listu
    • list je uzel, který nemá žádné potomky
  • maximální hodnota
    • podle sémantiky vnitřního datového typu
  • maximální hodnota na listech
  • průměrná hodnota
  • průměrná hodnota na listech
  • průměrná hodnota na maximální hloubce

Routing

Implementujte zjednodušený algoritmus pro tvorbu kostry sítě. Tento algoritmus se používá pro detekci minimálních cest mezi zapojenými switchi v síti.

Základní popis

Systém začíná ve stavu kdy máme několik switchů, každý ze switchů má předem určené množství portů. Porty můžou být nezapojené, zapojené do jiného switche, nebo zapojené do koncových počítačů.

Pro zjednodušení uvažujeme pouze spojitý systém (existuje cesta z každého switche do každého switche).

Algoritmus

Každý switch začíná ve stavu kdy zná minimální cestu ke strojům zapojeným na jeho portech (cesta délky 0) a u všech ostatních strojů má uvedenou nekonečnou vzdálenost (reprezentující nedosažitelný stroj).

Switch informaci o minimálních cestách (pouze konečných) oznámí všem switchům ke kterým je připojen.

Pokud switch dostane informaci o cestách od svého souseda, spojí si tuto informaci se svojí lokální informací a pokud dojde k aktualizaci některé z cest, pošle tuto informaci svým sousedům.

Např. pokud switch zná cestu na stroj ID10 přes port 3 se vzdáleností 3 a dostane novou informaci na portu 2 o cestě se vzdáleností 1, nastaví se pro stroj ID10 cestu přes port 2 o vzdálenosti 2. Tuto novou cestu vypropaguje svým sousedním switchům.

Ukončení

Tento algoritmus nemá explicitní ukončovací podmínku. Nicméně pokud budeme přepokládat že se zprávy neztrácí, je zřejmé, že systém po nějaké době zkonverguje do stavu kdy každý switch bude znát minimální cestu na každý stroj.

Ve zkonvergovaném stavu v systému nejsou žádné nezpracované zprávy a žádný uzel není ve stavu kdy se chystá notifikovat souseda o nové lepší cestě.

Implementace

Stroje budou v systému reprezentované pouze svými ID, switche budou reprezentovány třídou, která bude zároveň obsahovat hlavní logiku.

Počet portů by měl být konfigurovatelný.

Demonstrační main by měl vytvořit náhodný svět ve kterém bude rozumný počet různě zapojených switchů, na kterých následně budou zapojené koncové stroje.

Algoritmus by měl být schopen pracovat s postupným zapojováním (při zapojení se na nový spoj odešlou minimální cesty, čímž se opět spustí algoritmus).

Týden 7

Obsah cvičení

Týden 8

Týden 8

Obsah není zveřejněný.
Týden 9

Týden 9

Obsah není zveřejněný.
Týden 10

Týden 10

Obsah není zveřejněný.
Týden 11

Týden 11

Obsah není zveřejněný.
Týden 12

Týden 12

Obsah není zveřejněný.
Týden 13

Týden 13

Obsah není zveřejněný.
Týden 14

Týden 14

Obsah není zveřejněný.