Podobně jako v prvním semestru v předmětu IZP, tak i ve druhém si do skladiště schovávám vypracování projektů. Třeba se ještě někdy budou hodit
Modul pro práci s výčtovým typem
V této části jsme měli vytvořit modul, který bude zprostředkovávat běžné operace (čtení ze vstupu, výpis na výstup) nad výčtovým typem. Konkrétně šlo o dny v týdnu. Formáty byly čtyři: krátký bez diakritiky „Ct“, krátký s diakritikou „Čt“, dlouhý bez diakritiky „Ctvrtek“ a konečně dlouhý s diakritikou „Čtvrtek“. Funkce načítající ze vstupu musela umět rozpoznat všechny platné formáty a samozřejmě ošetřit cokoliv co by mohlo způsobit problémy.
Modul pro výpis chyb
Zde šlo především o to, prakticky si vyzkoušet napsat funkci s proměnným počtem parametrů. Naše funkce měla mít stejnou funkčnost jako printf, pouze hlášku uvozovala textem „CHYBA“ a posílala na stderr. Samotná implementace byla triviální, asi tak na 10 řádků.
Enumtest
Speciální předem zadaná program, testující správnou funkčnost modulu pro chyby a pro práci s enum typem. Jediná práce k tomuto potřebná bylo správné nadefinování závislostí v makefile.
Erathostenovo síto aneb prvočísla a makra
Toto byla nejzajímavější část celého projektu. Úkolem bylo najít nejvyšší prvočíslo nižší než 90.000.000, přičemž program měl běžet nanejvýš dvě sekundy. Implementace musela být pomocí bitového pole (vlastní výroby) a maker nad ním. Algoritmus Erathostenova síta je velice jednoduchý, ale má opravdu velké rezervy co se optimalizace týče. Přestože mi nejdříve výpočet trval i 10s, ve finále jsem se dostal pod hranici jedné sekundy. Jde jenom o to, dobře si promyslet, která čísla je nutné testovat a která už automaticky vypadnou z výběru, pak to jde snadno
Celkově hodnotím první projekt jako zahřívací. S makry jsem si vyhrál (každá desetina sekundy se počítala
) ), ale zbytek byla absolutní nuda. Tak či tak mi bylo odměnou příjemných 15 bodů z 15 možných.
Celý balíček si můžete stáhnout zde.