 |
|
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/2023-24/zavoral/XXXX
- na počítačích s Windows doporučuji jako klienta používat TortoiseGit
- 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
- pravidelná práce a dokončené a odladěné všechny příklady ze cvičení v GitLabu (včetně absencí!)
- vypracování posledního domácího úkolu (zadání cca v první polovně prosince) - ReCodex
- vypracování předchozích DÚ není povinné, ale feedback vás pomůže připravit
- úspěšné složení zápočtového testu (poslední cvičení semestru v labu na školním počítači)
- zadání bude založeno na posledním DÚ, proto je ve vašem zájmu ho vypracovat co nejlépe a odstranit případné připomínky
- 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 a odladěného zápočtového programu nejpozději do 30.4.
- velmi doporučuji dříve, abyste měli dostatek času na opravy a doplnění
- poslední možné odevzdání všech oprav zápočťáku 31.5.
- jakékoliv individuální podmínky lze domluvit pouze na začátku semestru
Zápočtový programu
- kompletní 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
- použití konkrétní externí knihovny musíte nastudovat samostatně
- 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
- 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.
- hodnotí se to, co sami naprogramujete (tj. jednoduché zavolání superúžasné knihovny není vhodný zápočťák)
- 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 kompilaci, sestavení, spuštění a ladění předem na různých platformách (tj. gcc na linuxu a Visual Studio na Windows)
- nebude akceptováno 'na platformě XY se mi to nepodařilo rozchodit'
- nebude akceptováno 'nainstalujte si celý framework, nevím jak se distribuuje samotná aplikace'
- C++ nemá (zatím) standardní knihovny pro grafiku nebo síťování, 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, 'life', ...)
- aplikace s výraznou převahou GUI, kdy aplikační logika je tvořena jen fragmenty kódu obsluhujícími události GUI
- 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
Adventure guild manager
Akordy
Algebraicky multigrid
Analyza toniny z audia
Analyzér barvy hlasu
Arbitraze sazek
Auticka
Bang!
Bioinformatické metody - proteiny
Bug Tracker
Cachovaci upload server
Canasta
Cardmaster
Casticovy engine
Chips challenge game
DHT-like P2P
Detekce a zpracování proudu obrázků
Detekce kolizi
Distribuované úložiště dat
Dots and Boxes (P2P, AI)
Duna 2 (strat game)
Emulace rescue robotu
Engine pro ekonomickou RT strategii
Generovani krajiny
Generovani pseudorealnych stromu
GeoSol the embedded GPS problem solver
Grafovy editor
Graph analysis
Graph matching
Hanabi AI (game)
Hra Caylus
Infrastruktura pro generování a uchovávání klíčů
Instant messaging
Integrator a vyhledavac jizdnich radu
Interpret Forth / Scheme / ...
Interpret geometrickeho jazyka
Jazyk pro matematicky popis grafu a jejich kresleni
Kompilátor imperativního jazyka
Letadlo nad terenem
MIDI klavir s transpozici a Synthesii
Magic: The Gathering engine
Maly dratenik
Map-Reduce Engine
Monopoly
Motivacni strategie
Obecne multisudoku s prekryvajicimi se ctverci
Ogre bludiste
OneEye (zaznamenávání partie go z obrázků)
Ostrovy a sopky
Particle engine
Pazaak (Karetni hra)
Ping Pong Delay
Piškvorky++ s nestandardními topologiemi
Planovaci kalendar
Pokemoni online
Predzpracovani astro pozorovani
Prehravac not 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
Sitova strilecka
Social desktop client
SovereignPlay
Stack Attack
Star wars
Střílečka s inteligencí
Synchronizator souboru
Tanky na 3D cestach
Vesmirna strilecka
Vlacek
World of Warcraft bot
Zavody auticek