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:
- Triedenie
- Asociatívne polia
- Spojkové zoznamy
- Vyhľadávací strom: Binárny vyhľadávací strom, prechádzanie inorder, preorder, postorder, vyhľadávanie. pridávanie
- Zásobník
- Binárna kopa
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í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.
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í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ť
- č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.