======== 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 |