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íkaz make 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é.

Skúška