Pokud právě studujete předmět Programování na střední nebo vysoké škole, existuje nenulová pravděpodobnost, že po vás budou učitelé chtít vyřešit nějaký projekt. Dále je možné, že vás vyučující překvapí požadavkem, že máte odevzdat nejenom naprogramované řešení zadané úlohy, ale budou po vás dokonce chtít odevzdat vysázenou dokumentaci k vašemu řešení. Dokonce je pravděpodobné, že se nespokojí jen s jednou stránkou s vágním popisem, ale budou chtít třeba 10-20 stránek. A budou to chtít vysázet alespoň ve Wordu nebo dokonce v LaTeXu.
Proč by po vás učitelé programování měli chtít něco takového? Vyřešit projekt a ještě dvacet stránek textu!? To přece nechtějí ani učitelé češtiny jako slohovku! Učitelé programování totiž předpokládají, že takovou znalost a zkušenost budete potřebovat. Na vysoké škole budete takto psát bakalářkou či diplomovou práci a existují i firmy, které po vás takové zprávy budou čas od času vyžadovat, aby měli materiál pro nové členy týmů, kteří budou na vaši práci navazovat.
Abyste si mohli prohlédnout, jak takový školní projek může vypadat, vytvořil jsem pro vás vzorové řešení jednoduché úlohy, včetně dokumentace jejího řešení.
Vytvoř program, který vypočte počet dnů mezi dvěma kalendářními daty. Program musí zohlednit přestupné roky. Standardní systémové funkce pro práci s kalendářními daty lze použít pouze pro ověření správnosti výsledku.
Přestupný rok je každý rok, jehož letopočet je násobkem čísla 4, s výjimkou celých století, která přestupná nejsou. I zde ale platí ještě jedna výjimka: roky, které jsou násobkem čísla 400 přestupné jsou, ačkoliv to jsou také celá století.
Program přečte ze standardního vstupu jeden řádek, na kterém bude textový řetězec ve formátu dd.mm.rrrr-dd.mm.rrrr
, například 12.01.0823-06.09.1981
.
Program na výstup vytiskne jediný řádek obsahující počet dnů mezi zadanými daty, například 423188
.
Navrhni vhodnou množinu testovacích dat, která otestují všechny možnosti, při nichž by se mohla projevit chyba. Zkoušej dávat na vstup syntakticky chybný vstup (15.dubna.1758), logicky chybný vstup (30.2.2001), dále otestujte data, která obsahují a neobsahují přestupný rok atd.
Testovací data mohou být v souboru a do programu je lze přesměrovat. Bude to fungovat stejně, jako kdybyste je na standardní vstup psali ručně.
Toto je vzorově vyřešená úloha s obtížností odpovídající menšímu středoškolskému projektu. Je to ukázka poměrně jednoduchého reálného programu. Pokud s programováním začínáte, může být zkoumání tohoto kódu pro vás užitečným cvičením. Věřím, že prozkoumáním této úlohy získáte více, než ztrácením času u trivialit typu Hello world, kterých ostatně na internetu najdete obrovská kvanta.
Čeho byste si měli na tomto projektu všímat:
datumy.cbp
je projektový soubor pro Code::Blocks. Přiložený Makefile
ale umožňuje překládat program i bez IDE (např. v replit.com).make doc
.test.sh
spouští hotový program s různými testovacími hodnotami a kontroluje je oproti správným hodnotám připraveným v souborech ideal.test1
a ideal.test2
. Také testuje, jak se program chová při zadání chybných hodnot. Takový testovací skript lze spouštět rutinně při každé změně v programu a jde si tak ověřit, že program funguje stále správně.Zde najdete vzorově vypracovanou dokumentaci řešení tohoto projektu. Je vysázena v LaTeXu, ale v podobném formátu jde sázet i v Libre Office Writeru nebo třeba MS Wordu.
Jde o dokumentaci řešení úlohy, nikoli o dokumentaci programátorskou -- tu si můžete vygenerovat ze zdroje pomocí programu Doxygen. Cílem této dokumentace je popsat proces analýzy zadaného problému a následného návrhu řešení, z něhož vyplyne popis skutečné implementace.
Čeho byste si měli všímat na této dokumentaci: