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
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,sscanf, fgets,atof,atol,strtof,strtol,strtok`
  • alokácia a dealokácia pamäte, malloc,calloc,free,realloc,
  • kopírovanie reťazcov a inicializácia. memset, memcpy, strcpy
  • triedenie: qsort

Naštudujte a nacvičte si algoritmy tak aby ste ich vedeli samostatne naprogramovať na skúške. Pri príprave používajte aj systém Valgrind. V prípade, že nie sú postačujúce prednášky a cvičenia, odporúčaný spôsob praktickej a teoretickej prípravy je naštudovať si problém a vyskúšať pomoocu Geek4Geeks Practice:

Príklad možných zadaní:

  • Zostavte počítadlo slov alebo číslic
  • Vypíšte strom vo formáte preorder alebo postoder.
  • Overte kopovitosť zadanej postupnosti.
  • Zostavte spojkový zoznam.
  • Iné zadanie na vyššie uvedenú tému.

Domáca skúška - Riadny termín: 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ý. Môžete vymyslieť aj vlastný algoritmus.

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.

Vaše riešenie by malo byť ukončené a odovzdané najneskôr 2 dni pred termínom skúšky na ktorý ste sa prihlásili.

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.

Vyhodnotenie je zatiaľ osobné. Možno neskôr pribudnú automatické testy.

Domáca skúška - Opravný termín - Kalkulačka

Naprogramuj vedeckú kalkulačku. Kalkulačka by mala vyhodnocovať aj zložitejšie výrazy v infixnej notácii.

Kalkulačka by mala podporovať tieto operácie:

  • načítanie a prácu s číslami s presnosťou min. 2 desatinné miesta.
  • sčítanie, odčítanie, násobenie, delenie, zátvorky.
  • sinus, cosinus, odmocnina, druhá mocnina, logaritmus.

Príklad použitia:

(2 + 3) * 2
10
(10 * 2) + (6 / 2)
23

Pri riešené môžete využiť prepis infixovej formy zápisu do postfixovej. Potom môžete problém riešiť ako "zásobníkovú" kalkulačku.

Odovzdanie

Riešenie odovzdávajte na GIT s pomocou systému Traktor do repozitára usaa23 do adresára sk2.

Vaše riešenie by malo byť ukončené a odovzdané najneskôr 2 dni pred termínom skúšky na ktorý ste sa prihlásili.

Adresár musí obsahovať:

  • calculator.h : hlavičkový súbor s predpismi funkcií uvedených vyššie.
  • calculator.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ť
  • či funguje vyhootenie jednoduchých výrazov.
  • či funguje vyhodnotenie zložitejších výrazov.
  • či máte implementovanú prioritu operátorov.
  • či funguje vyhodnotenie zátvoriek.
  • či fungujú aj unárne operácie.

Vyhodnotenie je zatiaľ osobné. Možno neskôr pribudnú automatické testy.

Skúška