======== HW 09 - Analýza textu ======== ^ Termín odevzdání | 12.12.2020 19.12.2020 23:59 CEST | ^ Bodový zisk | 8b (4+2+1+1) | ^ Min. bodový zisk | 4b | ^ Počet uploadů | 15 | ^ Typ zadání | povinné | Cílem úlohy je provést analýzu textu ve formě textového souboru obecné délky na standardním vstupu programu. V úloze uvažujeme pouze slova bez diakritiky. Čísla se v textu nevyskytují. Rozšíření A a B jsou nezávislé programy, které se liší pouze přepínači při spuštění programu, přičemž je třeba splnit základní zadání. Pro získání maximálního počtu bodů musí fungovat obě rozšíření A i B. ===== Zadání (4b) ===== * Ze standardního vstupu přečtěte textový soubor obecné velikosti. * Program zpracovává parametry z příkazové řádky a ovlivňuje podle jejich hodnot chování programu (viz dále). Pořadí parametrů je **libovolné**. * Vstupní text rozdělte na slova. Ze slov odstraňte všechna interpuknční znaménka ('','', ''.'', '':'', '';'', a další). * Vypište seznam všech (unikátních) slov textu a jejich četnosti. * Pro slovo ve výpisu je vyhrazeno ''20'' znaků. Za místem vyhrazeným pro slovo je mezera, která odděluje slovo od čísla reprezentujícího četnost. * Seznam může být primárně **case-insensitive** (tzn. Osel a osel jsou stejná slova, v seznamu se objeví osel) nebo **case-sensitive** (tzn. Osel a osel jsou dvě různá slova, v seznamu se objeví obě). Chování programu ovlivňuje parametr programu ''-c'' (viz příklady). * Určete počet všech slov. Za slovo se považuje i číselná hodnota, pokud se v textu vyskytuje. * Najděte nejčastější a nejméně časté slovo. Pokud je slov více, vypište je v pořadí, v jakém se vyskytují v textu. * Návratová hodnota programu bude vždy ''0''. * Výpis na standardní výstup je ukončen znakem ''\n''. ==== Rozšíření A (2b) ==== * Styl řazení výpisu seznamu ovládejte volbou parametru programu ''-s''. Pro ''-s 1'' je seznam nalezených slov řazen vzestupně podle četnosti, pro ''-s 2'' je seznam nalezených slov řazen podle abecedy. Jiné hodnoty parametru budou ignorovány, na standardní chybový výstup pak program vypíše "Warning: Chybna hodnota parametru -s!\n". ==== Rozšíření B (1b) ==== * Omezte parametrem programu ''-l'' délku vypisovaných slov. Hodnota parametru ''-l'' je kladné celé číslo, hodnota ''0'' potlačí výpis seznamu slov. Pokud není podmínka pro parametr splněna, je parametr ignorován a na standardní chybový výstup program vypíše "Warning: Chybna hodnota parametru -l!\n". ==== Rozšíření A+B (1b) ==== * Je vyžadována funkčnost obou rozšíření A i B, pro udělení max. počtu bodů ===== Příklady ===== Testovací soubor: $ cat pub00.in Ahoj, jak se mas. Mam se dobre. Jak se mas ty? Ja se mam taky dobre. Implicitní chování programu (bez parametrů příkazové řádky - case insensitive, slova seřazena v pořadí výskytu v datovém souboru) $ ./a.out < pub00.in Seznam slov: ahoj 1 jak 2 se 4 mas 2 mam 2 dobre 2 ty 1 ja 1 taky 1 Pocet slov: 9 Nejcastejsi: se Nejmene caste: ahoj ty ja taky Case sensitive výpis (parametr ''-c'') $ ./a.out -c < pub00.in Seznam slov: Ahoj 1 jak 1 se 4 mas 2 Mam 1 dobre 2 Jak 1 ty 1 Ja 1 mam 1 taky 1 Pocet slov: 11 Nejcastejsi: se Nejmene caste: Ahoj jak Mam Jak ty Ja mam taky Řazení podle výskytu (vzestupně, case-insensitive případ) ./a.out -s 1 < pub00.in Seznam slov: ahoj 1 ty 1 ja 1 taky 1 jak 2 mas 2 mam 2 dobre 2 se 4 Pocet slov: 9 Nejcastejsi: se Nejmene caste: ahoj ty ja taky Řazení podle abecedy (case-sensitive případ) ./a.out -c -s 2 < pub00.in Seznam slov: Ahoj 1 Ja 1 Jak 1 Mam 1 dobre 2 jak 1 mam 1 mas 2 se 4 taky 1 ty 1 Pocet slov: 11 Nejcastejsi: se Nejmene caste: Ahoj Ja Jak Mam jak mam taky ty Limit délky vypisovaných slov ./a.out -l 3 < pub00.in Seznam slov: jak 2 mas 2 mam 2 Pocet slov: 9 Nejcastejsi: se Nejmene caste: ahoj ty ja taky ./a.out -l 0 < pub00.in Pocet slov: 9 Nejcastejsi: se Nejmene caste: ahoj ty ja taky ===== Odevzdání ===== Veřejné příklady + Makefile: {{ :courses:b0b99prpa:hw:hw09_-_text.zip |}} ^ ^ Povinné zadání ^ ^ Název v BRUTE | HW09 | ^ Odevzdávané soubory | main.c | ^ Argumenty při spuštění | -l, -c, -s | ^ Kompilace pomocí | clang -pedantic -Wall -Werror -std=c99 -O2 |