Дводимензионални низови у програмском језику С

Дводимензионални низови у програмском језику С

Низ уреди

Низови (arrays) података представљају најједноставније и најчешће коришћене сложене (структуриране) типове. Они служе за представљање из математике добро познатих вектора, матрица и вишедимензионалних низова.[1]

Низ је ограничен, уређен скуп променљивих истог типа.[2] Променљиве у низу су компоненте или елементи. Тип елемената низа је базни тип. Елементима низа се приступа преко редног броја унутар низа који се назива индекс елемената низа. У програмском језику С први елемент низа има индекс 0, други индекс 1 и тако даље. Ако су елементи низа скаларни онда је дати низ једнодимензионалан. Дводимензионалан низ је низ који има елементе који су низови скаларних података. Дводимензионалан низ се још назива и матрица. По овој логици, низ који има димензију к је низ чији су елементи низови димензије к-1.

Декларација дводимензионалног низа-матрице уреди

Декларација матрице се изводи тако што се наведе име основног типа података[3] који ће се чувати у матрици а потом име променљиве иза кога следе два пара угластих заграда . На пример:

int M[10][5];

float T[3][4];

Овако су декларисана два низа-матрице М и Т. М је матрица која има 10 врста и 5 колона а предвиђена је за смештање целобројних вредности. Т је матрица која има 3 врсте и 4 колоне а чуваће реалне бројеве једноструке тачности.

Општи облик декларације матрице је:

tip_elementa ime_niza[BrojVrsta][BrojKolona]

У меморији се елементи низа смештају редом по врстама. Прво редом елементи из прве врсте. Одмах за њима редом елементи из друге врсте, и тако, врста по врста.


Приступ члановима низа уреди

Елементима низа се приступа преко редног броја унутар низа – преко индекса низа. На месту индекса се може појавити произвољан аритметички израз, с тим да вредност израза мора бити целобројна. ПР: Ако је декларисан низ int ocene[V][K]; V и K су очекивани број врста и колона за обраду Приступ елементима низа је следећи: ocene[i][j]
ocene[i][j] даје вредност оцене у реду i а колони ј при чему мора да буде испуњено:

0<= i<V i 0<= j<K Дакле, први ред је на индексу 0, као и прва колона. Променом индекса i се померамо вертикално дуж колоне, док се променом индекса j померамо дуж врсте.

На пример ако је низ декларисан као int ocene[30][12], имамо следећу табелу индекса i,j

0 ,0 0, 1 ... 0 ,11
1, 0 1, 1 ... 1 ,11
... ... ... ...
29,0 29,1 ... 29,11


Иницијализација низа уреди

Додела почетних вредности подацима при декларацији је иницијализација. Ако у програмском језику С нема иницијализације променљивих, њихове врености су недефинисане. Једино се статичке и спољашње променљиве аутоматски иницијализују нулама ако су бројчане променљиве. Ако желимо експлицитно да доделимо почетне вредности елементима низа, морамо то урадити или у самој декларацији низа, или програмски. Низ се може иницијализовати навођењем листе иницијализатора у витичастим заградама, па како су елементи опет низови, они се могу навести опет у витичастим заградама. Унутрашње витичасте заграде се могу и изоставити. Додела вредности се увек обавља по растућем редоследу индекса, како су елементи и смештени у меморији. Број иницијализатора мора бити мањи или једнак броју елемената низа. У случају да имамо мање иницијалних вредности од броја елемената у низу, дате вредности се додељују елементима са почетка низа а преостали елементи добијају нулте почетне вредности.

Следеће иницијализације формирају матрице истог садржаја.

int а[3][4]= {{1,2,3,0},{5,6,0,0},{9,0,0,0}};

int а[3][4]= {1,2,3,0,5,6,0,0,9,0,0,0};

int а[3][4]= {1,2,3,0,5,6,0,0,9};

int а[3][4]= {{1,2,3},{5,6},{9}};

int а[][4]= {1,2,3,0,5,6,0,0,9,0,0,0};

1 2 3 0
5 6 0 0
9 0 0 0

У последњем примеру је низ декларисан као int а[][4], што може бити збуњујуће. Овакав вид декларације је дозвољен само ако је наведена иницијализација. Дакле, могуће је изоставити први индекс, тј. број врста, јер се он може одредити у фази компилације на основу броја иницијализатора. (Уопште, декларација вишедимензионалних низова мора имати границу за све димензије осим прве, која може бити изостављена ако низ има иницијализацију, пошто се може израчунати у фази компилације на основу броја иницијализатора и расположивих других димензија).

int a[][4]={1,2,3,4,5,6,7,8,9}; дефинише исту матрицу као и int a[3][4]={{1,2,3,4},{5,6,7,8},{9}}

Пример приступа преко индекса: елементу са вредношћу 6 се приступа са а[1][1].

И још неки примери: int a[3][4]={{1,2},{3,4}}; дефинише следећи низ(матрицу) а

1 2 0 0
3 4 0 0
0 0 0 0

int a[3][4]={0}; дефинише низ а и попуњава све елементе нулама

Квадратна матрица уреди

Ако је број врста матрице једнак броју колона, ради се о квадратној матрици. За квадратну матрицу су могуће додатне обраде везане за главну и споредну дијагоналу. Припадност главној дијагонали се одређује тако што су индекс врсте и колоне међусобно једнаки.

Литература уреди

  • C Osnovi programiranja, Milan Čabarkapa, Krug , Beograd , (1996). rr. 163-165
  • Programski jezik C sa rešenim zadacinma, Laslo Kraus, Akademska misao, Beograd . (2014). rr. 97-101
  • Programiranje 1, Filip Marić, Predrag Janičić, Matematički fakultet Beogradе, Beograd , (2015). rr. 137-138

Референце уреди

  1. ^ Programski jezik C sa rešenim zadacinma, Laslo Kraus, Akademska misao, Beograd . (2014). rr. 97.
  2. ^ C Osnovi programiranja, Milan Čabarkapa, Krug , Beograd . (1996). rr. 133.
  3. ^ C - Variables and types

Спољашње везе уреди