Týden 7
Pole předem neznáme velikosti (od verze C99)
Standard C99 umožnil v programech v jazyce C definovat pole, jehož velikost je určená hodnotou proměnné. V předchozích verzích jazyka musela být velikost pole konstantou známou v době překladu programu. Využít toho lze např., pokud uživatel na začátku programu zadá velikost dalšího vstupu.
Následující program si vyžádá počet prvků načítané množiny a poté jednotlivé prvky načte do pole:
// Pocet prvku se nacte do predem definovane promenne n printf("Zadejte pocet prvku: "); scanf("%d", &n); // Definice pole s velikosti ulozenou v promenne int set[n]; // Nacteni jednotlivych prvku for (int i = 0; i < n; i++) { printf("Zadej %d. prvek mnoziny: ", i + 1); scanf("%d", &set[i]); }
Řetězce I
Řetězec je v jazyce C reprezentován jako pole znaků - typu char, které jako poslední znak řetězce obsahuje hodnotu 0 - konstanta '\0'. Nulová hodnota v poli znaků říká, kde řetězec končí. Všechny funkce pracující s řetězci na tuto nulovou hodnotu spoléhají, pokud ji v řetězci zapomeneme, bude program pracovat chybně. V jazyce C je možné definovat řetězcovou konstantu - řetězec, který vytvoří kompilátor - takto:
char string[] = "Hello, World!"; // Nacteni retezce pomoci funkce gets char string2[128]; printf("Zadejte retezec: "); gets(string2);
Základní funkce pro práci s řetězci naleznete v hlavičkovém souboru string.h - http://www.cplusplus.com/reference/clibrary/cstring/.
Řadící algoritmy Bubble sort a Insertion sort
Oba uvedené algoritmy nejsou zrovna efektivní pro řazení velkého množství prvků, ale jsou jednoduché na pochopení a naprogramování.
Podrobnosti a hezké animace najdete např. zde:
- Bubble sort - http://en.wikipedia.org/wiki/Bubble_sort,
- Insertion sort - http://en.wikipedia.org/wiki/Insertion_sort.
Složené (agregované) datové typy II - vícerozměrné pole
V jazyce C je možné nadefinovat vícerozměrná pole. Výhodou vícerozměrných polí může být jednodušší zápis programu. Představme si, že chceme v programu definovat matici celých čísel o rozměrech 2x2, v C to můžeme udělat takto:
// definice matice 2x2 jako dvourozmerneho pole int matrix[2][2]; // prvky matice pak můžeme adresovat pomocí dvou indexů od 0 int a11 = matrix[0][0];
Pokud v C definujeme vícerozměrné pole výše uvedeným bude pravděpodobně (záleží na kompilátoru) v paměti toto pole reprezentováno jako jednorozměrné. Např. naše matice se nejspíše uloží tak, že se nejprve uloží jednorozměrné pole matrix[0] a za něj pole matrix[1]. Celé to pak v paměti bude vypadat pole o 4 prvcích - int pole[4] = { matrix[0][0], matrix[0][1], matrix[1][0], matrix[1][1] };