logo

Viacrozmerné polia v C

Predpoklad: Polia v C

Viacrozmerné pole možno nazvať ako pole polí, ktoré uchovávajú homogénne údaje v tabuľkovej forme. Údaje vo viacrozmerných poliach sú vo všeobecnosti uložené v pamäti v poradí podľa riadkov.

The všeobecná forma deklarovania N-rozmerných polí je znázornené nižšie.



Syntax:

data_type array_name[size1][size2]....[sizeN];>
  • Dátový typ : Typ údajov, ktoré sa majú uložiť do poľa.
  • názov_poľa : Názov poľa.
  • veľkosť1, veľkosť2,…, veľkosťN : Veľkosť každého rozmeru.

Príklady :

burak ozcivit
  Two dimensional array:   int two_d[10][20];   Three dimensional array:   int three_d[10][20][30];>

Veľkosť viacrozmerných polí:

Celkový počet prvkov, ktoré je možné uložiť do viacrozmerného poľa, možno vypočítať vynásobením veľkosti všetkých rozmerov.
Napríklad:

  • Pole int x[10][20] môže uložiť celkom (10*20) = 200 prvkov.
  • Podobne pole int x[5][10][20] môže uložiť celkom (5*10*20) = 1000 prvkov.

Aby sme získali veľkosť poľa v bajtoch, vynásobíme veľkosť jedného prvku celkovým počtom prvkov v poli.
Napríklad:

  • Veľkosť poľa int x[10][20] = 10 * 20 * 4 = 800 bajtov. (kde int = 4 bajty)
  • Podobne aj veľkosť int x[5][10][20] = 5 * 10 * 20 * 4 = 4 000 bajtov. (kde int = 4 bajty)

Najbežnejšie používané formy viacrozmerného poľa sú:

  1. Dvojrozmerné pole
  2. Trojrozmerné pole

Dvojrozmerné pole v C

A dvojrozmerné pole alebo 2D pole v C je najjednoduchšia forma viacrozmerného poľa. Dvojrozmerné pole si môžeme predstaviť ako pole jednorozmerných polí usporiadaných nad sebou, čím sa vytvorí tabuľka s „x“ riadkami a „y“ stĺpcami, kde sa číslo riadka pohybuje od 0 do (x-1) a číslo stĺpca. sa pohybuje od 0 do (y-1).

grafické znázornenie dvojrozmerného poľa

Grafické znázornenie dvojrozmerného poľa veľkosti 3 x 3

Deklarácia dvojrozmerného poľa v C

Základná forma deklarovania 2D poľa s X riadky a a stĺpce v C je znázornené nižšie.

Syntax:

data_type array_name[x][y];>

kde,

  • Dátový typ: Typ údajov, ktoré sa majú uložiť v každom prvku.
  • názov_poľa: názov poľa
  • X: Počet riadkov.
  • a: Počet stĺpcov.

Dvojrozmerné celočíselné pole môžeme deklarovať povedzme „x“ s 10 riadkami a 20 stĺpcami ako:

Príklad:

int x[10][20];>

Poznámka: V tomto type deklarácie je poľu pridelená pamäť v zásobníku a veľkosť poľa by mala byť známa v čase kompilácie, t. j. veľkosť poľa je pevná. Pole môžeme vytvoriť aj dynamicky v C pomocou uvedených metód tu.

Inicializácia dvojrozmerných polí v jazyku C

Rôzne spôsoby, ktorými možno inicializovať 2D pole, sú nasledovné:

  1. Používanie zoznamu inicializátorov
  2. Používanie slučiek

1. Inicializácia 2D poľa pomocou zoznamu inicializátorov

Môžeme inicializovať 2D pole v C pomocou zoznamu inicializátorov, ako je uvedené v príklade nižšie.

Prvý spôsob:

int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}>

Vyššie uvedené pole má 3 riadky a 4 stĺpce. Prvky v zátvorkách zľava doprava sú v tabuľke uložené aj zľava doprava. Prvky budú v poli vyplnené v poradí: prvé 4 prvky zľava budú vyplnené v prvom riadku, ďalšie 4 prvky v druhom riadku atď.

Druhá metóda (lepšia) :

int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};>

Tento typ inicializácie využíva vnorené zátvorky. Každá sada vnútorných zátvoriek predstavuje jeden rad. Vo vyššie uvedenom príklade sú celkom tri rady, takže existujú tri sady vnútorných výstuh. Výhodou tejto metódy je, že je ľahšie pochopiteľná.

Poznámka: Počet prvkov v zozname inicializátora by mal byť vždy menší alebo rovný celkovému počtu prvkov v poli.

Pole môžeme deklarovať aj bez definovania veľkosti riadku, ak používame inicializáciu zoznamu. Kompilátor v tomto prípade automaticky odvodí veľkosť poľa:

data_type array_name[][y] = {...} ;>

Stále je povinné definovať počet stĺpcov.

2. Inicializácia 2D poľa pomocou slučiek

Na inicializáciu každého člena 2D poľa jeden po druhom môžeme použiť ľubovoľnú slučku C, ako je znázornené v príklade nižšie.

Príklad:

int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }>

Táto metóda je užitočná, keď hodnoty každého prvku majú nejaký sekvenčný vzťah.

Prístup k prvkom dvojrozmerných polí v jazyku C

K prvkom v 2D poliach sa pristupuje pomocou indexov riadkov a indexov stĺpcov. Na každý prvok v 2D poli možno odkazovať takto:

Syntax:

array_name[i][j]>

kde,

zoznam ako pole
  • ja: Index riadku.
  • j: Index stĺpca.

Príklad:

int x[2][1];>

Vyššie uvedený príklad predstavuje prvok prítomný v treťom riadku a druhom stĺpci.

Poznámka : V poliach, ak je veľkosť poľa N. Jeho index bude od 0 do N-1. Preto pre index riadku 2 je číslo riadku 2+1 = 3. Na výstup všetkých prvkov dvojrozmerného poľa môžeme použiť vnorené slučky for. Budeme potrebovať dve „ pre „slučky“. Jeden na prechádzanie riadkami a druhý na prechádzanie stĺpcami.

Pre tlač celého poľa pristupujeme ku každému prvku jeden po druhom pomocou slučiek. Poradie prechodu môže byť poradie hlavného riadka alebo poradie hlavného stĺpca v závislosti od požiadavky. Nasledujúci príklad demonštruje prechod 2D poľa hlavným riadkom.

Príklad:

C




// C Program to print the elements of a> // Two-Dimensional array> #include> int> main(>void>)> {> >// an array with 3 rows and 2 columns.> >int> x[3][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };> >// output each array element's value> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <2; j++) {> >printf>(>'Element at x[%i][%i]: '>, i, j);> >printf>(>'%d '>, x[i][j]);> >}> >}> >return> (0);> }> // This code is contributed by sarajadhav12052009>

>

>

Výkon

Element at x[0][0]: 0 Element at x[0][1]: 1 Element at x[1][0]: 2 Element at x[1][1]: 3 Element at x[2][0]: 4 Element at x[2][1]: 5>

Časová zložitosť: O(N*M) , kde N(tu 3) a M(tu 2) sú počty riadkov a stĺpcov.

Priestorová zložitosť:O(1)

Ako sú 2D polia uložené v pamäti?

Prvky 2-D poľa musia byť uložené súvisle v pamäti. Keďže počítače majú lineárne pamäťové adresy, 2-D polia musia byť linearizované, aby sa umožnilo ich ukladanie. Existujú dva spôsoby, ako dosiahnuť linearizáciu prvkov poľa:

  • hlavný rad- Technika linearizácie uloží najprv prvý riadok poľa, potom druhý riadok poľa, potom tretí riadok atď. (t. j. prvky sú uložené po riadkoch. Riadky sú uvedené na základe stĺpcov)
  • Stĺpec-hlavný – Táto technika linearizácie ukladá najskôr prvý stĺpec, potom druhý stĺpec, potom tretí stĺpec atď.

Počítač nesleduje adresy všetkých prvkov poľa, ale sleduje Base Address (počiatočná adresa úplne prvého prvku) a v prípade potreby vypočíta adresy prvkov.

Ak chcete vedieť viac, pozrite si článok - Výpočet adresy prvku 1-D, 2-D a 3-D

Trojrozmerné pole v C

A Trojrozmerné pole alebo 3D pole v C je kolekcia dvojrozmerných polí. Dá sa vizualizovať ako viacero 2D polí naskladaných na seba.

grafické znázornenie trojrozmerného poľa

Grafické znázornenie trojrozmerného poľa veľkosti 3 x 3 x 3

Deklarácia trojrozmerného poľa v C

Môžeme deklarovať 3D pole s X 2D polia, z ktorých každý má a riadky a S pomocou syntaxe uvedenej nižšie.

Syntax:

data_type array_name[x][y][z];>
  • Dátový typ: Typ údajov, ktoré sa majú uložiť v každom prvku.
  • názov_poľa: názov poľa
  • X: Počet 2D polí.
  • a: Počet riadkov v každom 2D poli.
  • s: Počet stĺpcov v každom 2D poli.

Príklad:

int array[3][3][3];>

Inicializácia trojrozmerného poľa v C

Inicializácia v 3D poli je rovnaká ako pri 2D poliach. Rozdiel je v tom, že s rastúcim počtom rozmerov sa zvýši aj počet vnorených zátvoriek.

3D pole v C je možné inicializovať pomocou:

  1. Zoznam inicializátorov
  2. Slučky

Inicializácia 3D poľa pomocou zoznamu inicializátorov

Metóda 1 :

int x[2][3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};>

Metóda 2 (lepšia) :

int x[2][3][4] =   {   { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} },  { {12,13,14,15}, {16,17,18,19}, {20,21,22,23} }  };>

Opäť, rovnako ako 2D polia, môžeme tiež deklarovať 3D polia bez špecifikácie veľkosti prvých rozmerov, ak na inicializáciu používame zoznam inicializátorov. Kompilátor automaticky odvodí veľkosť prvého rozmeru. Ale ešte musíme upresniť zvyšok rozmerov.

data_type array_name[][y][z] = {....};>

Inicializácia 3D poľa pomocou slučiek

Je to tiež podobné ako pri 2D poli s jednou ďalšou vnorenou slučkou na prístup k ďalšej dimenzii.

int x[2][3][4]; for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { for (int k=0; k<4; k++) { x[i][j][k] = (some_value); } } }>

Prístup k prvkom v trojrozmernom poli v jazyku C

Prístup k prvkom v 3D poliach je tiež podobný ako pri 2D poliach. Rozdiel je v tom, že musíme použiť tri slučky namiesto dvoch slučiek pre jeden ďalší rozmer v 3D poliach.

Syntax:

array_name[x][y][z]>

kde,

  • X: Index 2D poľa.
  • a: Index tohto riadku 2D poľa.
  • s: Index tohto stĺpca 2D poľa.

C




// C program to print elements of Three-Dimensional Array> #include> int> main(>void>)> {> >// initializing the 3-dimensional array> >int> x[2][3][2] = { { { 0, 1 }, { 2, 3 }, { 4, 5 } },> >{ { 6, 7 }, { 8, 9 }, { 10, 11 } } };> >// output each element's value> >for> (>int> i = 0; i <2; ++i) {> >for> (>int> j = 0; j <3; ++j) {> >for> (>int> k = 0; k <2; ++k) {> >printf>(>'Element at x[%i][%i][%i] = %d '>, i,> >j, k, x[i][j][k]);> >}> >}> >}> >return> (0);> }>

>

pre slučku java

>

Výkon

Element at x[0][0][0] = 0 Element at x[0][0][1] = 1 Element at x[0][1][0] = 2 Element at x[0][1][1] = 3 Element at x[0][2][0] = 4 Element at x[0][2][1] = 5 Element at x[1][0][0] = 6 Element at x[1][0][1] = 7 Element at x[1][1][0] = 8 Element at x[1][1][1] = 9 Element at x[1][2][0] = 10 Element at x[1][2][1] = 11>

Podobným spôsobom môžeme vytvárať polia s ľubovoľným počtom rozmerov. So zvyšujúcim sa počtom rozmerov však narastá aj zložitosť. Najpoužívanejším viacrozmerným poľom je dvojrozmerné pole.

Polia tiež úzko súvisia s ukazovateľmi v jazyku C. Ak sa chcete dozvedieť viac o vzťahu polí s ukazovateľmi v C, pozrite si toto článok.