Skúška
Hodnotenie
Hodnotenie sa skladá z troch častí. Na úspešnú skúšku musíte dosiahnuť minimálne 31 bodov zo 60. Ku skúške sa pripočítajú body zo zápočtu, ak ste presiahli 40 bodov.
Kód | Body | Úloha | |
---|---|---|---|
p | 20 | školská úloha | |
r | 20 | domáca úloha | druhá úloha |
o | 20 | 2 otázky zo zdrojových kódov alebo základné pojmy z prednášok |
Školská skúška:
čas na vypracovanie 60 min.
20 bodov, v miestnosti
Naštudujte a nacvičte si funkcie:
- načítanie postupnosti slov alebo číslic, oddelených medzerou alebo koncom riadku, funkcie:.
scanf
,fgets,
atof,
atol,
strtof,
strtol`, - alokácia a dealokácia pamäte,
malloc
,calloc
,free
- kopírovanie reťazcov a inicializácia.
memset
,memcpy
,strcpy
- triedenie:
qsort
Naštudujte a nacvičte si algoritmy:
- spojkový zoznam
- Zásobník
- Binárna kopa, Overenie kopovitosti
- triedenie - qsort, bubblesort, heapsort.
- Binárny vyhľadávací strom, prechádzanie inorder, preorder, postorder, vyhľadávanie. pridávanie
Príklad možných zadaní:
- Zostavte počítadlo slov alebo číslic
- Vypíšte strom vo formáte preorder
- Overte kopovitosť zadanej postupnosti
- Zostavte spojkový zoznam
Domáca skúška - Kompressor
.
Naprogramuj nástroj na kompresiu a dekompresiu.
Na kompresiu použite aspoň dva kompresné algoritmy, napr. : Huffmanovo kódovanie, LZ77, LZ78, Run Length kódovanie alebo iný.
Kompresor a dekompresor by mal byť schopný pracovať s ľubovoľným binárnym súborom do 10 MB. Súbor by mal byť po skomprimovaní menší minimálne o 10 percent a po dekomprimovaní by mal byť zhodný s pôvodným súborom. Pri práci s binárnymi súbormi môžete využiť funkcie fopen()
, fread()
a fwrite()
.
Na otestovanie kompresora a dekompresora použite súbory z Cantebury corpus
Riešenie nesmie využívať inú ako štandardnú knižnicu. Riešenie sa môže inšpirovať voľne dostupným cudzím riešením za predpokladu že uvediete zdroj, ste podrobne oboznámený so zdrojovým kódom a viete odpovedať na otázky týkajúce sa kódu. Vaše riešenie nemôže kopírovať cudzie riešenie.
Program by mal mať takéto rozhranie pri spustení z príkazového riadka:
# skomprimuje infile do súboru outfile
./compressor -c infile outfile
# dekomprimuje sUbor compressed a zapise do suboru uncompressed.
./compressor -d compressed uncompressed
Meno vstupného a výstupného súboru načítajte ako argument príkazového riadka. V zadaní by mali byť implementované tieto dve funkcie:
/**
* Skomprimuje súbor s názvom input_file_name
* a zapíše do súboru s názvom output_file_name
* @arg input_file_name in smerník na otvorený vstupný súbor (na čítanie)
* @arg output_file_nameout smerník na otvorený výstupný súbor (na zápis)
* @return počet bajtov skomprimovaného súboru
*/
int compress(const char* input_file_name, const char* output_file_name);
/**
* Dekomprimuje súbor in a zapíše do súboru out.
* @arg in smerník na otvorený vstupný súbor (na čítanie)
* @arg out smerník na otvorený výstupný súbor (na zápis)
* @return počet bajtov dekomprimovaného súboru
*/
int decompress(const char* input_file_name, const char* output_file_name);
Odovzdanie:
Riešenie odovzdávajte na GIT s pomocou systému Traktor do repozitára usaa23
do adresára sk1
.
Adresár musí obsahovať:
compressor.h
: hlavičkový súbor s predpismi funkcií uvedených vyššie.compressor.c
: implementácia funkcií definovaných v hlavičkovom súbore.main.c
: implementácia funkcie main().Makefile
: Pravidlá pre skompilovanie. Príkazmake
musí skompilovať program.README.md
s dokumentáciou. Dokumentácia musí obsahovať zadanie, stručný opis funkčnosti, stručný opis riešenia , podmienky za ktorých funguje a zoznam použitých zdrojov.
Hodnotenie
Pri hodnotení a testovaní si budem všímať:
- či sa program dá skompilovať.
- či sa dá spustiť spustiť kompresia a dekompresia.
- či máte alebo nemáte implementované dva kompresné algoritmy.
- či kompresia zmenšuje zadaný súbor.
- či sa skomprimovaný súbor dá dekomprimovať.
- či je dekomprimovaný súbor taký istý ako pôvodný súbor.
- či Váš program funguje aj na binárne súbory.
Opravná domáca skúška
Zadanie bude oznámené.