~~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