Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
ccpp:array [2019/10/20 22:04] – vytvořeno buresccpp:array [2023/02/27 08:54] (aktuální) bures
Řádek 3: Řádek 3:
  
 ===== Jednorozměrné pole ===== ===== Jednorozměrné pole =====
-Nejzákladnější verze pole je jednorozměré, které si můžeme představit jako v následující ukázce:+Nejzákladnější verze pole je tzv. jednorozměré pole, které si můžeme představit jako jednořádkovou tabulku v následující ukázce:
  
 <code c> <code c>
Řádek 13: Řádek 13:
  
 ==== Deklarace ==== ==== Deklarace ====
-Syntaxe deklarace pole vypadá následovně: ''datovy_typ identifikator[pocet_prvku];'', kde počet prvků musí být konstantní (být znám během překladu). Pole je po deklaraci neinicializované stejně jako v případě proměnných jednoduchých datových typů.+Syntaxe deklarace pole vypadá následovně: ''datovy_typ identifikator[pocet_prvku];'', kde **//pocet_prvku// musí být konstanta** (být znám během překladu). Pole je po deklaraci neinicializované stejně jako v případě proměnných jednoduchých datových typů.
  
 === Příklad === === Příklad ===
Řádek 29: Řádek 29:
 int pole[4] = {1, 2, 3, 4}; // inicializace pole hodnotami 1, 2, 3, 4. int pole[4] = {1, 2, 3, 4}; // inicializace pole hodnotami 1, 2, 3, 4.
 char pole2[] = {'a', 'b', 'c', 'd', 'e', 'f'}; // inicializace bez uvedení počtu prvků char pole2[] = {'a', 'b', 'c', 'd', 'e', 'f'}; // inicializace bez uvedení počtu prvků
 +short pole3[100] = {10, 20, 30}; // Prvni 3 položky maji dané hodnoty, zbytek je doplněn hodnotou 0
 </code> </code>
  
Řádek 46: Řádek 47:
  
 ===== Vícerozměrná pole ===== ===== Vícerozměrná pole =====
-TBA v rámci tématického plánu.+Pole může mít i více rozměrů jak jeden. V případě dvou rozměrů si lze pole představit jako tabulku s buňkami (řádky, sloupce) u tří rozměrů jako krychli jejíž části se adresují pomocí souřadnic (např. //X//, //Y//, //Z//). Počet rozměrů není striktně omezen a může značně přesahovat naši fantazii. 
 + 
 +==== Deklarace ==== 
 +Vícerozměrné pole deklarujeme uvedením více hranatých závorek za sebou: ''datovy_typ identifikator[rozmer1][rozmer2][rozmer3]...;'', kde ''rozměr#'' představuje velikost pole v daném rozměru. 
 + 
 +=== Příklady deklarací vícerozměrných polí === 
 +<code c> 
 +// tabulka obsahující 3 řádky a 5 sloupců 
 +int tabulka[3][5]; 
 + 
 +// krychle o velikosti 5 obsahující čísla s plovoucí čárkou 
 +cont int velikost = 5; 
 +float krychle[velikost][velikost][velikost] 
 + 
 +// pole o 5 rozměrech alokující pro každou sekundu z století jeden bajt s možností adresace na rok:den:hodinu:minutu:sekundu 
 +char stoleti[100][365][24][60][60]; 
 +</code> 
 +Zkuste spočítat jak by bylo veliké pole ''stoleti'', za předpokladu, že velikost se s každým dalším rozměrem násobí. (počítáme tedy zprava doleva) 
 + 
 +==== Incializace ==== 
 +Prvky pole můžeme opět v rámci deklarace rovnou inicializovat. Opět pomocí složených závorek, které se ale tentokrát do sebe zanořují podle rozměrů. Je třeba uvažovat nad celou věcí jako nad "polem polí"
 + 
 +=== Příklad dvourozměrného pole === 
 +Matice identity ([[https://en.wikipedia.org/wiki/Identity_matrix|Identity matrix]]) o velikosti 3 uložená po řádcích. 
 +<code c> 
 +float identity[3][3] = { {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f} }; 
 +                                                               ^ 
 +                                                               | 
 +  První rozměr (řádky) - obsahuje 3 další pole                   | 
 +                                       Druhý rozměr (3. sloupec) - obsahuje 3 položky typu float 
 +</code> 
 +==== Přístup k položkám vícerozměrného pole ==== 
 +Pro přístup ke konkrétním položkám opět využíváme indexů zapsaných v hranatých závorkách. Avšak musíme uvést index pro každý rozměr. 
 + 
 +=== Příklad přístupu k položkám v rámci výpisu matice === 
 +<code c> 
 +const int ROWS = 3; 
 +const int COLS = 3; 
 +float identity[ROWS][COLS] = { {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f} }; 
 + 
 +for (int row = 0; row < ROWS; ++row) 
 +
 +  putchar('('); 
 +  for (int col = 0; col < COLS; ++col) 
 +  { 
 +    printf("%f%s", identity[row][col], col < COLS - 1 ? ", " : ""); 
 +  } 
 +  putchar(')'); 
 +  putchar('\n'); 
 +
 +</code>
  • ccpp/array.1571601889.txt.gz
  • Poslední úprava: 2019/10/20 22:04
  • autor: bures