Vzorový projekt - Rozdíl kalendářních dat

[  Jak vzorové řešení používat  |  Zadání úlohy  |  Formát vstupních dat  |  Formát výstupních dat  ]

Jak vzorové řešení používat

Toto je vzorově vyřešená úloha s obtížností odpovídající zhruba 1. až 2. projektu předmětu Základy programování. Tento projekt neodevzdávejte! Tento projekt je ukázkou 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.

Na tomto projektu si máte možnost prohlédnout nejenom základní konstrukce jazyka C, ale také použití programu make pro překlad a pro správu projektu. Naleznete zde i testovací skript v jazyku BASH, kterým se můžete inspirovat při testování vlastních programů. Nebojte se tento program různě upravovat a rozšiřovat. Rozhodně si jeho funkčnost prohlédněte ve vhodném ladícím programu (v Makefile je připraveno pravidlo debug, takže zkuste v adresáři napsat make debug a spustí se debugger ddd). Pouhým pasivním zkoumáním kódu se toho moc nenaučíte.

K projektu je přiložena také vzorová dokumentace. Pokud absolvujete kurzy IZPIUS, budeme po vás takovou dokumentaci k projektům požadovat. Podobnou technickou zprávu od vás může vyžadovat zaměstnavatel, pokud se budete programováním živit. Rozhodně budete nuceni podobný text několikrát napsat během studia na vysoké škole, když budete řešit různé semestrální projekty. Tato technická zpráva je napsána v LaTeXu, ale měla by stejnou strukturu i kdyby byla psána v nějakém grafickém textovém procesoru (OOWrite, Word, ...).

V tomto projektu je zadáním dostatečně přesně specifikováno, jak se má program ovládat, proto se přiložená dokumentace tímto problémem příliš nezabývá. Pokud u nějakého projektu má v tomto směru autor volnou ruku, předpokládá se, že k programu dodá textový soubor s popisem ovládání a instalace a v hrubých rysech to popíše i v technické zprávě.

Poznámka pro studenty: Při psaní vlastních projektů a technických zpráv se můžete tímto projektem inspirovat, ale vždy se snažte vymýšlet vlastní řešení a problémy popisovat vlastními slovy. Zvláště u technické zprávy je vhodné se inspirovat pouze strukturou dokumentu a neopisovat z ní věty a odstavce (snadno se to pozná a usvědčí vás to z nedostatku vlastních nápadů).

Soubory ke stažení


Zadání úlohy

Vytvořte program, který vypočte počet dnů mezi dvěma kalendářními daty. Program musí zohlednit přestupné roky.

Přestupné roky

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í.

Příklad

Poznámka

Standardní systémové funkce pro práci s kalendářními daty lze použít pouze pro ověření správnosti výsledku.

Formát vstupních dat

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.

Příklad vstupních dat

12.01.0823-06.09.1981

Formát výstupních dat

Program na výstup vytiskne jediný řádek obsahující počet dnů mezi zadanými daty.

Příklad výstupních dat

423188

Pomůcka pro ladění

Testovací data můžete mít v souboru a do programu je přesměrovat. Bude to fungovat stejně, jako kdybyste je na standardní vstup psali ručně.

$ proj2 < data.txt

V Linuxu v shellu Bash to jde i takto:

$ proj2 <<< 12.01.0823-06.09.1981

Blíže viz info stránka programu bash.

Navrhněte vhodnou množinu testovacích dat, která otestují všechny možnosti, při nichž by se mohla projevit chyba. Zkoušejte 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.


Autor: David Martinek. Poslední modifikace: 12. February 2009. Pokud v tomto dokumentu narazíte na chybu, dejte mi prosím vědět.