spse:pm1:vicerozmerne_pole

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
spse:pm1:vicerozmerne_pole [2021/02/15 21:12] – vytvořeno jendaspse:pm1:vicerozmerne_pole [2024/07/07 16:48] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
 +~~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 ====== ====== Vícerozměrná pole ======
  
 ===== Dvourozmě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:+  * 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: 
 +<fragment-block>
 {{:spse:pm1:pasted:20210215-211049.png}} {{:spse:pm1:pasted:20210215-211049.png}}
 +</fragment-block>
 +  * 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:
  
-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. +<fragment-block>
- +
-2D pole deklarujeme v C následujícím způsobem: +
 <code c> <code c>
 int kinosal[5][5]; int kinosal[5][5];
 int i, j; int i, j;
 // Naplnění nulami // Naplnění nulami
-for (j = 0; j < 5; j++) +for (j = 0; j < 5; j++){ 
-    for (i = 0; i < 5; i++)+    for (i = 0; i < 5; i++){
         kinosal[j][i] = 0;         kinosal[j][i] = 0;
 +}
 +    }
 </code> </code>
 +</fragment-block>
 +<----
 +==== 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.
 +
 +<fragment-block>
 +<code c>
 +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;
 +}
 +</code>
 +</fragment-block>
 +
 +
 +==== Výpis pole ====
 +
 +
 +<fragment-block>
 +<code c>
 +for (j = 0; j < 5; j++)
 +{
 +        for (i = 0; i < 5; i++)
 +                printf("%d", kinosal[i][j]);
 +        printf("\n");
 +}
 +</code>
 +</fragment-block>
 +
 +
 +
 +===== 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:
 +<fragment-block>
 +{{:spse:pm1:pasted:20210215-211601.png}}
 +</fragment-block>
 +  * Vytvoření 3D pole:
 +
 +<fragment-block>
 +<code c>
 +int kinosaly[4][4][3];
 +</code>
 +</fragment-block>
 +
 +  * Přístup k prvkům pole:
 +
 +<fragment-block>
 +<code c>
 +kinosaly[3][2][1] = 1; // Druhý kinosál, třetí řada, čtvrtý sloupec
 +</code>
 +</fragment-block>
 +
 +===== 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):
 +
 +
 +<fragment-block>
 +<code c>
 +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 }
 +};
 +</code>
 +</fragment-block>
 +
 +
 +==== Zdroje ====
 +
 +https://www.itnetwork.cz/cecko/zaklady/vicerozmerna-pole-v-jazyce-c
 +
 +
  • spse/pm1/vicerozmerne_pole.1613423535.txt.gz
  • Poslední úprava: 2024/07/07 16:48
  • (upraveno mimo DokuWiki)