{{indexmenu_n>6}}
====== 6 - Pole variabilní délky a textové řetězce ======
===== Pole variabilní délky =====
* pro vyučující: [[courses:b0b36prp:internal:tutorialinstruction:06]]
==== Procvičovaná témata ====
* 1D pole variabilní délky
* pointer
==== Úkoly na cvičení ====
- 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.
/* PV: Zkraceno protoze je malo casu
- 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 =====
* 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]]
size_t strlen(const char *str)
* 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]]
int strcmp(const char *str1, const char *str2)
int strncmp(const char *str1, const char *str2, size_t n)
==== Úkoly ====
* Definujte textový řetězec "Everybody likes PRP" a vypište ho. Následně vypište z tohoto řetězce pouze "likes PRP" a nakonec řetězec změňte na "Tom likes PRP" 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