spse:pm1:vicerozmerne_pole

Toto je starší verze dokumentu!


→ Slide 1

Vícerozměrná pole

→ Slide 2
  • 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:

  • 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.
↓ Slide 3
  • 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;
}
    }
↓ Slide 4
  • 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;
}
↓ Slide 5
for (j = 0; j < 5; j++)
{
        for (i = 0; i < 5; i++)
                printf("%d", kinosal[i][j]);
        printf("\n");
}
→ Slide 6
  • 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:

  • 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
→ Slide 7
  • 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 }
};
↓ Slide 8
  • spse/pm1/vicerozmerne_pole.1613424314.txt.gz
  • Poslední úprava: 2024/07/07 16:48
  • (upraveno mimo DokuWiki)