Вишедимензионални низ – дефиниција

Хајде да искористимо оно што смо досад научили. Креирајмо и иницијализујмо три једнодимензионална низа a, b, c са по пет целих бројева:

int a[5] = {1, 2, 3, 4, 5};
int b[5] = {6, 7, 8, 9, 10};
int c[5] = {11, 12, 13, 14, 15};

Да видимо шта се дешава у меморији.

../_images/image1.png

Добили смо један нови низ који се састоји од три низа који су у меморији поређани један за другим. Да видимо како можемо направити једну нову променљиву којом би приказали сва три низа.

Посматрајмо ово мало другачије. Можемо низове да поставимо један испод другог у виду табеле и да сваки означимо новим индексом. Назовимо ту нову променљиву А и доделимо сваком реду индекс.

../_images/image2.png

У математици овакав распоред се назива матрица. Матрица има свој ред (врсту) и своју колону.

../_images/image3.png

Хајде да елементима матрица А доделимо одговарајуће индексе и представимо их математички.

../_images/image4.png

Шта примећујете? Као и код једнодимензионалног низа, индекси почињу од нуле. Овде имамо два индекса. Први индекс означава индекс реда, а други индекс колоне. Значи, ако за индекс реда уведемо променљиву \(i\), а за индекс колоне \(j\), добићемо општи члан матрице \(А_{ij}\).

С обзиром да у коду нисмо у могућности да на овај начин напишемо индексе, послужићемо се синтаксом једнодимензионалног низа и додаћемо још једну угласту заграду. Ако уз сваки индекс реда додамо индекс колоне у којој се елеменат налази, долазимо до тога да сваки елемент има у себи два индекса: индекс реда и индекс колоне А[red][kolona].

Долазимо до израза A[i][j].

У меморији су они сада смештени и означени на следећи начин:

../_images/image5.png

Као и код једнодимензионалног низа, и овде морамо унапред резервисати меморијски простор за смештање елемената низа. Тако долазимо до синтаксе за дефинисање матрице.

tip_elemenata ime_niza [br_redova][br_kolona];

Дефинисати матрицу B која садржи целе бројеве и има 3 реда и 4 колоне.

Решење: int B[3][4];

Задатак: Дефинисати матрицу C која садржи податке типа double и има 5 редова и 4 колоне.

Решење: double C[5][4];

Питање: Колико највише елемената може да се смести у низ A[5][12]?

Решење: Максималан број елемената је 60.

Хајде да уопштимо. Нека број редова буде r, а број колона k.

../_images/image6.png

Шта примећујеш? Последњи индекс реда је r-1, а колоне k-1.

Ово је јако битно јер се увек даје број редова и колона, а индекси почињу увек од нуле.

Посматрајмо ово као лист папира и додајмо још једну димензију која ће престављати број листа (слоја).

../_images/image7.png

Направимо још један овакав лист тако што ћемо индекс листа означити са један.

../_images/image8.png

Направимо l-ти овакав лист и поставимо их један иза другог.

../_images/image9.png

На овај начин добили смо један тродимензионални низ који се састоји из одређеног броја редова, колона и листова (слојева) и код кога је сваки елемент дефинисан са три индекса.

../_images/image10.png

Долазимо до дефиниције тродимензионалног низа:

tip_elemenata ime_niza [br_redova][br_kolona][br_slojeva];

Дефинисати тродимензионални низ B који садржи целе бројеве и има 3 реда, 3 колоне и 3 листа (слоја).

Решење: int B[3][3][3];

Дефинисати тродимензионални низ C који садржи податке типа double и има 5 редова, 4 колоне и 2 листа (слоја).

Решење: double C[5][4][2];

Колико највише елемената може да се смести у низ A[5][12][5]?

Решење: Максималан број елемената је 300.

Навести један карактеристичан предмет који се може назвати тродимензионалним низом.

Решење: Рубикова (мађарска) коцка.

../_images/image11.png

Математички можемо додати четврту, пету, шесту… n-ту димензију, али то је домен више математике.

Долазимо до дефиниције n-димензионалног низа:

tip_elemenata ime_niza [br_dimenziје_1][br_dimenziје_2][ br_dimenziје_3].....[ br_dimenziје_n];

Ми даље настављамо да анализирамо дводимензионални низ (матрицу). Ако научите како се ради са матрицама, научићете да радите и са низом од било колико димензија.