NPRG041 - Programování v C++ |
|
 |
Materiály k cvičení - paralelka Zavoral
|
GitLab
- průběžná práce na cvičeních a na zápočtovém příkladu všichni jednotně v MFF GitLabu
- https://gitlab.mff.cuni.cz/
- přihlašte se (před prvním cvičením) MFF loginem
- poté vám cvičící zpřístupní repository teaching/nprg041/2021-22/zavoral/XXXX
- na počítačích s Windows doporučuji jako klienta používat TortoiseGit, před prvním cvičením si ho nainstalujte a vyzkoušejte
- do GitLabu patří veškeré zdrojové, konfigurační, projektové a datové soubory; rozhodně tam ale nepatří vygenerované nebo dočasné soubory typu .obj, .tmp, .dbg apod.
Podmínky udělení zápočtu
- docházka (max. 3 absence)
- dokončené a odladěné příklady ze cvičení v GitLabu (včetně absencí!)
- vypracování dvou domácích úkolů (zadání během semestru - DÚ1 listopad, DÚ2 prosinec) - ReCodex!
- alespoň 50% bodů z DÚ a zkouškového testu (zkouškové období)
- zadání zápočtového programu do 20.11.
- průběžné používání Gitlabu po dobu celého vývoje zápočtového progamu (nahrání výsledných zdrojových kódů před odevzdáním je nepřípustné!)
- první pokus o odevzdání kompletně hotového zápočtovho programu nejpozději do 30.4. (velmi doporučuji dříve)
- poslední možné odevzdání všech oprav zápočťáku 28.5. (konec LS)
- jakékoliv individuální podmínky lze domluvit pouze na začátku semestru
Zápočtový programu
- vývoj a odevzdávání pouze přes MFF GitLab
- lze přijít (po předchozí domluvě termínu) i předvést osobně
- repository musí obsahovat kompletní historii vývoje a vše potřebné pro kompilaci a sestavení
- je nutné používat Gitlab během celého vývoje, nikoliv jen pro nahrání výsledných zdrojových kódů
- .sln/.prj/cmake/makefile - minimálně pro linux a win (VS)
- nestandardní knihovny, hlavičkové soubory apod.
- tj. nikoliv 'stáhněte si knihovnu XX a framework YY, zkompilujte a nakonfigurujte ...',
opravdu nejde instalovat speciální knihovny pro každý z cca 50 zápočtových programů každý rok
- výjimečné případy lze předem domluvit individuálně
- vše (včetně sestavení a spuštění) si vyzkoušejte na jiném prostředí
- jiný počítač se stejným OS, kde jste nevyvíjeli a nemáte předem nainstalované vše potřebné
- počítač s jiným OS a překladačem - multiplatformnost
- mělo by jít automaticky stáhnout projekt, spustit build (linux, VS) a spustit; pokud ne, dolaďte to do tohoto stavu
- s programem vždy dodejte dostatečně rozsáhlá data tak, aby bylo možné demonstrovat všechny podstatné vlastnosti programu
- mělo by být samozřejmostí:
- na korektní data musí program vždy dávat správné výsledky
- na žádných vstupních datech nesmí nekontrolovaně skončit (neošetřená výjimka, zacyklení, reference neexistující paměti, odlet apod.)
- i pro nefinální předvedení dodejte takovou dokumentaci, aby bylo možné program zkompilovat, spustit a ovládat
- finální odevzdání musí obsahovat programátorskou a uživatelskou dokumentaci
- za dokumentaci není považován výstup nástrojů typu doxygen - v dokumentaci by mělo být popsané to, co ve zdrojových souborech není
- efektivita a kultura
- dekompozice, encapsulace, robustnost, udržovatelnost, rozhraní, platformní nezávislost, separace aplikační logiky a I/O / GUI, komentáře, elegance a estetika ...
- externí knihovny a frameworky
- použití vhodných externích knihoven nic nebrání
- nutné uvést předem ve specifikaci zápočťáku
- hodnotí se to, co sami naprogramujete (tj. jednoduché zavolání superúžasné knihovny není vhodný zápočťák)
- nejsou vhodné ty knihovny/framworky, které brání použití aktuálního C++ (C++17/C++20), vnucují vlastní typy místo standardních apod.
- používejte pouze platformově nezávislé knihovny; platformově závislé (tj. jen pro OS XY) jen po předchozím explicitním schválení cvičícím
- použití konkrétní externí knihovny musíte nastudovat samostatně
- před vlastním programováním si vyzkoušejte 'technologické demo', tj. sestavení triviálního programu a jeho deployment na 'čistý' počítač
- vyzkoušejte předem na všech (alespoň dvou odlišných) platformách
- nebude akceptováno odevzdání typu 'nainstalujte si celý framework, nevím jak se distribuuje samotná aplikace'
- C++ nemá (zatím) standardní knihovny pro grafiku, počítejte s tím při volbě zápočtového programu
Témata zápočtových programů
- každý si vymyslí a navrhne sám
- kreativita v tomto smyslu je jednou z podmínek získání zápočtu
- pracnost: přiměřená
- tj. nikoliv na víkend nebo na týden, ale ani každodenní práce na půl roku
- vhodná témata: cokoliv, co nese známky softwarového díla
- pro inspiraci je dole na stránce uveden seznam některých zápočťáků z minulých let
- v žádném případě ale nejde o vyčerpávající nebo jinak autorizovaný seznam vhodných témat, jde jen o inspiraci
- vhodné téma je takové, na kterém si C++ pořádně procvičíte - dekompozice, objektový návrh, datové struktury, ...
- nevhodná témata:
- přepis zámých nebo nastudovaných algoritmů do C++ (stromy, grafové algoritmy, kompresní a šifrovací algoritmy ...)
- 1000000+1 -ní implementace notoricky známé věci (tetris, packman, bludiště, worms, bomberman a podobné prehistorické placaté krokovačky, známé algoritmy, ...)
- jednoduché diskrétní simulace (obchoďáků, výtahů, metra, ...)
- obecně cokoliv, co lze udělat za 'víkend' a na čem se nic z C++ nenaučíte
- už nejste v prváku
Některá témata zápočtových programů z minulých let
(Toto není vyčerpávající seznam témat, jen seznam příkladů možných témat pro inspiraci)
2D fyzikální engine
3D RPG strilecka v UnrealEngine
Adventure guild manager
Akordy
Algebraicky multigrid
Analyza toniny z audia
Analyzér barvy hlasu
Aproximace funkcí pro výpočty průchodu tepelného záření plynem
Arbitraze sazek
Auticka
Automaticke lusteni
Automaticke rozpoznavani jazyka
Backend pro knihkupectvi
Background Backuper
Bang!
Bioinformatické metody - proteiny
Bot do Starcraftu
Bug Tracker
Cachovaci upload server
Canasta
Cardmaster
Casticovy engine
Chaos in the old world
Chips challenge game
Chovatelska stanice
DHT-like P2P
Detekce a zpracování proudu obrázků
Detekce kolizi
Dots and Boxes (P2P, AI)
Duna 2 (strat game)
Edukativni strileni podel grafu
Emulace rescue robotu
EnergyLogger
Engine pro ekonomickou RT strategii
Evoluce robotu v mape
Extrakce klicovych slov z dokumentu
Fast locate
Figurkova preklapeci hra
File manager
Generovani krajiny
Generovani pseudorealnych stromu
GeoSol the embedded GPS problem solver
Grafovy editor
Grafová knihovna
Graph analysis
Graph matching
Hanabi AI (game)
Hra Caylus
Hradlové sítě
Hudebni prehravac ruznych formatu
Infrastruktura pro generování klíčů
Instant messaging
Interpret Forth
Interpret Scheme
Interpret geometrickeho jazyka
Jazyk pro matematicky popis grafu a jejich kresleni
Karetni hra Pazaak
Keyword analysis
Kompilátor imperativního jazyka
Letadlo nad terenem
MIDI klavir s transpozici a Synthesii
Magic: The Gathering engine
Maly dratenik
Map-Reduce Engine
Motivacni strategie
Ogre bludiste
OneEye (zaznamenávání partie go z obrázků)
Ostrovy a sopky
Parser/serializer JSON, API
Particle engine
Ping Pong Delay
Piškvorky++ s nestandardními topologiemi
Planovaci kalendar
Pokemoni online
Použití sufixového pole a Burrows-Wheelerovy transformace v bioinformatice
Predzpracovani astro pozorovani
Prehravac not
Prehravac s frekvencni analyzou
Prekladac Pascal -> C
Prescoboj - pseudosachy
Primy prenos videa s prepinanim zdroju
Real-time strategie
Rescue roboti
Rizeni letoveho provozu
Roboticke sitovani
Rozpoznavani obliceju
Rpg
Rychly batch-processing fotek plavajicich castic
Sazec textu
Segmentace obrazu
Simulace atomových struktur
Sitova strilecka
Social desktop client
SovereignPlay
Stack Attack
Star wars
Střílečka s inteligencí
Sudoku constraint-propagation solver
Synchronizator souboru
Tanky na 3D cestach
Ulítlé pseudošachy
Vesmirna strilecka
Virtualni procesor
Vlacek
Integrator a vyhledavac jizdnich radu
World of Warcraft bot
Zavody auticek
Šachový engine v síle šachového mezinárodního mistra