{{indexmenu_n>5}}
====== Lab 05 - Pole variabilní délky a textové řetězce ======
* Pro vyučující: [[courses:bab36prga:internal:tutorialinstruction:05]]
==== Procvičovaná témata ====
* 1D pole variabilní délky
* Textový řetězec jako pole znaků
* [[http://www.asciitable.com/|ASCII tabulka]]
* Délka textového řetězce: [[http://www.tutorialspoint.com/c_standard_library/c_function_strlen.htm|strlen]]
* Porovnání řetězců: [[http://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm|strcmp]], [[http://www.tutorialspoint.com/c_standard_library/c_function_strncmp.htm|strncmp]]
===== Úkoly na cvičení =====
==== Pole variabilní délky ====
- Napište program, který provede inicializaci 1D pole. Velikost pole zadá uživatel ze standardního vstupu. Protože se jedná o inicializaci za běhu programu, je třeba zkompilovat program s podporou standardu C99.
- Pole naplňte celými čísly ze standardního vstupu.
- Doplňte program tak, aby prošel pole pomocí cyklu a vypsal jednotlivé prvky pole. Zkuste napsat cyklus tak, aby program vypsal pole ve více sloupcích.
- Napište funkci, která vypíše prvky pole, které je jejím argumentem. Funkci implementujte v přechozím programu.
- Napište funkci, která naplní pole zadané velikosti náhodnými celými čísly v zadaném rozsahu. Vytvořené pole je návratovou hodnotou funkce.
- Naplňte pole pomocí funkce z předchozího bodu. Napište funkci, která určí četnost čísel v tomto poli (histogram).
=== Další úkoly ===
- Napište funkci, která setřídí pole metodou counting-sort. Nesetříděné pole je argumentem funkce, návratovou hodnotou funkce je pole setříděné.
==== Textové řetězce ====
* Definujte textový řetězec "Everybody likes PRG" a vypište ho. Následně vypište z tohoto řetězce pouze "likes PRG" a nakonec řetězec změňte na "Tom likes PRG" a vypište ho. Přemýšlejte, jak to provést nejúsporněji.
* Naprogramujte funkce ''strlen'', ''strcmp'' a ''strncmp''.
=== cat ===
* Naprogramujte zjednodušenou verzi programu ''cat''. Načtěte vstup ze stdin a zase ho vypište na výstup (stdout).
echo "Hello world" | cat
Hello world
* Upravte program tak, aby vypsal vstup až za první mezerou:
echo "Hello world" | cat2
world
* Vypište každe slovo ze vstupu na samostatný řádek (za oddělovače slov považujte mezeru, konec řádku ''\n'' a tabulátor ''\t'').
echo "Hello world and hello again " | words
Hello
world
and
hello
again
* Nyní zkuste totéž, ale za každé slovo vypište i jeho délku a slova 'and' a 'or' nejak označte.
echo "Hello world and hello again " | words-len
Hello 5
world 5
and 3 <--
hello 5
again 5
=== tr ===
* Načtěte vstup a vypište ho s malými písmeny přepsanými na velké a naopak
echo "Hello world" | cap
hELLO WORLD
* Nyní zkuste zjednodušenou verzi programu ''tr''. Program bude mít zadány dva argumenty na příkazové řádce, které budou sloužit jako předpis pro překlad znaků viz. následující příklad:
echo "Hello world" | tr 'Hl' 'Xk'
Xekko workd
echo "Hello world" | tr 'dweji' '01234'
H2llo 1orl0
* Zkuste si pospojovat dnešní programy. Např.:
echo "Hello world and hello again " | words | cap
hELLO
WORLD
AND
HELLO
AGAIN