Miniúkoly

Cílem miniúkolů je poskytnout vám, studentům, sbírku jednoduchých příkladů, na kterých si můžete vyzkoušet základní koncepty prezentované na přednášce. Náročností jsou obvykle na úrovni příkladů ze cvičení.

Tyto úkoly nejsou hodnocené ani povinné. Můžete si je vypracovat kdykoliv.

Sady

Miniúkoly lze alternativně stáhnout i do Git repozitáře, stejně jako cvičení. Viz návod.

Úkoly pro týden 1
1 úkol
task01-hello_world

Stáhnout

Úkoly pro týden 2
10 úkolů
task01-alphanumeric task02-interval task03-sizeof task04-closest-leap-year task05-vertices-distance task06-pen-pineapple-apple-pen task07-digit task08-powers-of-two task09-right-triangle task10-work-or-weekend

Stáhnout

Úkoly pro týden 3
10 úkolů
task01-array-basics task02-very-simple-functions task03-pointer-basics task04-array-pointers task05-function-madness task06-unit-conversions task07-pointer-arguments task08-pointer-jumper task09-loaders task10-min-max-functions

Stáhnout

Úkoly pro týden 4
14 úkolů
task01-swap task02-array-max task03-matrix-min task04-matrix-sum task05-vector-norm task06-scalar-product task07-orthogonal task08-change-value task09-modify-string task10-median task11-reverse-array task12-split-array task13-pointer-array task14-print-odd

Stáhnout

Úkoly pro týden 5
11 úkolů
task01-rotate task02-words-split task03-string-stat task04-write-lower-upper task05-substring-count task06-replace-substring task07-palindrome task08-trim-whitespace task09-sort-strings task10-cvs-nth-column task11-ctype-counts-table

Stáhnout

Úkoly pro týden 6
15 úkolů
task01-array-2D task02-realloc-2D task03-calloc task04-up256a task05-up256b task06-up256c task07-ptr-up256 task08-malloc-byte-array task09-malloc-byte-array-2 task10-malloc-byte-array-3 task11-malloc-byte-ptr-array task12-malloc-byte-ptr-array-2 task13-malloc-byte-ptr-array-3 task14-malloc-int-ptr-array task15-malloc-256

Stáhnout

Úkoly pro týden 7
10 úkolů
task01-typedef task02-struct task03-vectors task04-tagged-union task05-salaries task06-flags task07-family-tree task08-dude task09-house task10-http

Stáhnout

Úkoly pro týden 8
10 úkolů
task01-hidden-message task02-case-inverter task03-file-size task04-compare task05-hidden-message-2 task06-string-switch task07-bin2hex task08-people-generator task09-caesar task10-url-encode

Stáhnout

Úkoly pro týden 9
10 úkolů
task01-areaof task02-avgntree task03-caesar task04-fibonacci task05-levelsum task06-postorder task07-qsort task08-transform task09-bsearch task10-time-format

Stáhnout

Úkoly pro týden 10
10 úkolů
task01-abs task02-min-max task03-odd-even task04-power-div-square task05-range task06-sum-diff-multiply task07-implication-equivalence task08-obfuscation task09-overwrite-sabotage task10-debugging

Stáhnout

Úkoly pro týden 11
10 úkolů
task01-list-file task02-parse-cl task03-file-size task04-file-content task05-pattern-match task06-threads task07-local-time task08-bitfields task09-benchmarking task10-parallel

Stáhnout

Informace

Popis adresářové struktury

Každá sada obsahuje kořenový CMakeLists.txt, který můžete otevřít ve svém oblíbeném IDE. Dále zde naleznete adresáře s příklady.

Adresáře s příklady obsahují následující soubory:

  • CMakeLists.txt

  • source.c — soubor se zadáním, vaše řešení pište zde

  • solution.c — vzorové řešení

Navíc tyto adresáře obsahují testovací sady. Každá testovací sada s názvem NAME je definována alespoň jedním z těchto souborů:

NAME.in

standardní vstup; pokud neexistuje, pak je vstup prázdný

NAME.out

očekávaný standardní výstup; pokud neexistuje, pak nesmí program na výstup vypsat nic

NAME.err

očekávaný chybový výstup; pokud neexistuje, pak nesmí program na chybový výstup vypsat nic

NAME.args

parametry pro program, na každém řádku jeden

Automatické testování (Aisa)

Pokud úkol vypracujete na stroji Aisa, můžete na testování použít skript test-miniukol, který zkontroluje vaše řešení proti dodaným testovacím sadám.

Pokud jste v adresáři s řešením (hledá se soubor source.c), pak zavolejte skript

aisa$ /home/kontr/test-miniukol

který sám nalezne všechny sady v aktuálním pracovním adresáři a spustí je. Skript má také další vlastnosti, vyzkoušejte:

aisa$ /home/kontr/test-miniukol --help
aisa$ /home/kontr/test-miniukol --diff NazevSady

Manuální testování (Linux)

Úkoly můžete vypracovat v libovolném pořadí. Pokud si nějaký úkol vyberete, můžete jej vypracovat následujícím způsobem:

  • nejdříve otevřete source.c vybraného příkladu a přečtěte si zadání,

  • podívejte se na příklady vstupů a argumentů v souborech .in a `.args`,

  • zkuste řešení vypracovat podle zadání.

Na systému Linux (např. Aise) můžete testovat sadu následujícím způsobem:

  • sada bez vstupu a argumentů

    program >stdout 2>stderr
    
    # pokud existuje SADA.out:
    diff -U0 SADA.out stdout
    
    # pokud existuje SADA.err:
    diff -U0 SADA.err stderr
  • sada se vstupem

    program <SADA.in >stdout 2>stderr
    
    # ...
  • sada s argumenty

    xargs -a SADA.args -d'\n' program >stdout 2>stderr
    
    # ...
  • ostatní kombinace snad jednoduše odvodíte z výše uvedených příkladů