~~NOCACHE~~
~~REVEAL theme=dokuwiki&transition=convex&controls=1&show_progress_bar=1&build_all_lists=1&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1480x960~~
====== Vícerozměrná pole ======
===== Dvourozměrné pole =====
* Dvourozměrné pole si můžeme v paměti představit jako tabulku a mohli bychom takto reprezentovat např. rozehranou partii piškvorek. Pokud bychom se chtěli držet reálných aplikací, které budete později v zaměstnání tvořit, můžeme si představit, že do 2D pole budeme ukládat informace o obsazenostech sedadel v kinosálu. Situaci bychom si mohli graficky znázornit např. takto:
{{:spse:pm1:pasted:20210215-211049.png}}
* Kinosál by byl v praxi samozřejmě větší, ale jako ukázka nám toto pole postačí. 0 znamená volno, 1 obsazeno. Později bychom mohli doplnit i 2 - rezervováno a podobně. Pro tyto stavy by bylo správnější vytvořit nějaké konstanty, ale s tím se setkáme až později, takže si teď musíme vystačit pouze s čísly.
---->
* 2D pole deklarujeme v C následujícím způsobem:
int kinosal[5][5];
int i, j;
// Naplnění nulami
for (j = 0; j < 5; j++){
for (i = 0; i < 5; i++){
kinosal[j][i] = 0;
}
}
<----
==== Modifikace ====
* Nyní kinosál naplníme jedničkami tak, jak je vidět na obrázku výše. Protože budeme jako správní programátoři líní, využijeme k vytvoření řádku jedniček for cykly :) Pro přístup k prvku 2D pole musíme samozřejmě zadat 2 souřadnice.
kinosal[2][2] = 1; // Prostredek
for (i = 1; i < 4; i++) // 4. radek
{
kinosal[i][3] = 1;
}
for (i = 0; i < 5; i++) // Posledni radek
{
kinosal[i][4] = 1;
}
==== Výpis pole ====
for (j = 0; j < 5; j++)
{
for (i = 0; i < 5; i++)
printf("%d", kinosal[i][j]);
printf("\n");
}
===== N-rozměrná pole =====
* Někdy může být příhodné vytvořit si pole o ještě více dimenzích. My všichni si jistě dokážeme představit minimálně 3D pole. S příkladem s kinosálem se nabízí případ užití, kdy má budova více pater (nebo obecně více kinosálů). Vizualizace by vypadala asi nějak takto:
{{:spse:pm1:pasted:20210215-211601.png}}
* Vytvoření 3D pole:
int kinosaly[4][4][3];
* Přístup k prvkům pole:
kinosaly[3][2][1] = 1; // Druhý kinosál, třetí řada, čtvrtý sloupec
===== Inicializace pole =====
* Ještě si ukážeme, že i vícerozměrná pole je možné rovnou inicializovat hodnotami (kód vytvoří rovnou zaplněný kinosál jako na obrázku):
int kinosal[5][5] = {
{ 0, 0, 0, 0, 1 },
{ 0, 0, 0, 1, 1 },
{ 0, 0, 1, 1, 1 },
{ 0, 0, 0, 1, 1 },
{ 0, 0, 0, 0, 1 }
};
==== Zdroje ====
https://www.itnetwork.cz/cecko/zaklady/vicerozmerna-pole-v-jazyce-c