Definisanje višedimenzionalnih nizova

Višedimenzionalni nizovi definišu se na isti način kao i jednodimenzionalni nizovi, jedino iza imena treba navesti dužinu po svim dimanzijama:

	tip ime [ dužina ] [ dužina ] ... [ dužina ];

Tip predstavlja tip prostih elemenata niza. Ime je identifikator niza. Dužine predstavljaju brojeve elemenata po pojedinim dimenzijama. Moraju biti konstante ili izrazi čiji su svi operandi konstante. Svaka dužina mora se pisati unutar odvojenog para srednjih zagrada [ ].

Primer: Definisanje višedimenzionalnih nizova

	float matr[100][30], niz3d[10][3][5];

Niz matr je niz od 100 elemenata, koji su nizovi od po 30 elemenata tipa float. Drugim rečima, niz matr predstavlja dvodimenzionalni niz (matricu) sa 100 x 30 elemenata. Prvi elemenat je matr0,0, a poslednji matr99,29.

Niz niz3d je niz od 10 elemenata, koji su nizovi od po 3 elementa, a koji su nizovi od po 5 elemenata tipa float. Drugim rečima, niz niz3d predstavlja trodimenzionalni niz sa 10 x 3 x 5 elemenata. Prvi element je niz3d0,0,0, a poslednji niz3d9,2,4.

Za oba niza zajednički je tip njihovih prostih elemenata float. Zato su mogli da se definišu istom naredbom.


Inicijalizacija višedimenzionalnih nizova

Početne vrednosti za višedimenzionalne nizove navode se na isti način kao i za jednodimenzionalne nizove:

	tip  ime [ dužina ] ... [ dužina ] = {vrednost, vrednost, ..., vrednost};

s tim da vrednosti i same treba da su nizovi konstanti odgovarajuće dimenzije. Naravno, te nizove treba staviti unutar dodatnih parova velikih zagrada {}. Dubina uklapanja zagrada treba da bude jednaka broju dimanzija niza. Na svakom nivou uklapanja broj vrednosti ne sme da bude veći od odgovarajuće dužine. Ako je broj vrednosti manji, preostali elementi popunjavaće se nulama.

Dozvoljeno je da inicijalizator višedimenzionalnog niza bude jednodimenzionalni niz konstanti (bez uklopljenih zagrada {}). Tada će se komponentni nizovi popunjavati do kraja vrednostima uzastopnih konstanti. Tek kada je jedan komponentni niz popunjen do kraja, prelazi se na popunjavanje narednog komponentnog niza.

Primer: Inicijalizacija višedimenzionalnih nizova

	int a[2][3] = { {1,2,3}, {4,5,6} };
	int b[4][3] = { {1,2}, {3,4,5}, {6} };		/* isto što i */
	int c[4][3] = { {1,2,0}, {3,4,5}, {6,0,0} };
	int d[4][3] = { 1, 2, 3, 4, 5, 6, 7 };		/* isto što i */
	int e[4][3] = { {1,2,3},{4,5,6},{7,0,0},{0,0,0} };
	int f[2][3] = { {1}, {2}, {3} };	/* neispravne inicijalizacije */
	int g[2][3] = { {1,2,3,4}, {5} };
	int h[2][3] = { 1, 2, 3, 4, 5, 6, 7 };

Matrica a ima dve vrste i tri kolone i inicijalizator sadrži dve grupe od po tri konstante.

Matrica b ima četiri vrste i tri kolone, ali inicijalizator sadrži samo tri grupe koje nemaju sve po tri konstante. Nepotpune grupe popunjavaju se nulama, a nedostajuća grupa će imati sve nule. Konačan rezultat je isti kao pri inicijalizaciji matrice c za koju su sve grupe popunjene do kraja.

Matrica d ima četiri vrste i tri kolone, ali inicijalizator je u obliku jednodimenzionalnog niza konstanti. Prve tri konstante (1,2,3) popunjavaju prvu vrstu, sledeće tri (4,5,6) drugu vrstu. Za treću vrstu ostala je samo jedna konstanta (7), pa se dopunjava sa dve nule.

Inicijalizatori za poslednje tri matrice od po dve vrste i tri kolone su neispravne. Za matricu f ima previše grupa konstanti. Za matricu g prva grupa konstanti ima previše elemenata. Za matricu h broj konstanti je veći od ukupnog broja prostih elemenata matrice.


Pristupanje elementima višedimenzionalnog niza

Pristupanje elementima višedimenzionalnog niza (indeksiranje) postiže se izrazom oblika:

	niz [indeks]

gde indeks može da bude proizvoljan celobrojni izraz. Vrednost tog izraza mora da bude od 0 do dužina-1, gde je dužina broj elemenata niza. Posledice su nepredvidljive ako taj uslov nije ispunjen.

Da bi se pristupilo prostom elementu višedimenzionalnog niza, potrebno je navesti po jedan indeksni izraz za svaku dimenziju unutar odvojenih parova zagrada:

	niz [indeks] [indeks] ... [indeks]

Primer: Pristupanje elementima višedimenzionalnih nizova

	float vekt [50], matr[10][20];
	vekt [1] = 155;
	vekt [i+(j-1)*n] = a + b * c;
	matr[i][j] = vekt[i+j];

Last modified: Saturday, 26 January 2019, 10:15 PM