Dvodimenzionalni nizovi u programskom jeziku S

S Vikipedije, slobodne enciklopedije

Dvodimenzionalni nizovi u programskom jeziku S

Niz[uredi | uredi izvor]

Nizovi (arrays) podataka predstavljaju najjednostavnije i najčešće korišćene složene (strukturirane) tipove. Oni služe za predstavljanje iz matematike dobro poznatih vektora, matrica i višedimenzionalnih nizova.[1]

Niz je ograničen, uređen skup promenljivih istog tipa.[2] Promenljive u nizu su komponente ili elementi. Tip elemenata niza je bazni tip. Elementima niza se pristupa preko rednog broja unutar niza koji se naziva indeks elemenata niza. U programskom jeziku S prvi element niza ima indeks 0, drugi indeks 1 i tako dalje. Ako su elementi niza skalarni onda je dati niz jednodimenzionalan. Dvodimenzionalan niz je niz koji ima elemente koji su nizovi skalarnih podataka. Dvodimenzionalan niz se još naziva i matrica. Po ovoj logici, niz koji ima dimenziju k je niz čiji su elementi nizovi dimenzije k-1.

Deklaracija dvodimenzionalnog niza-matrice[uredi | uredi izvor]

Deklaracija matrice se izvodi tako što se navede ime osnovnog tipa podataka[3] koji će se čuvati u matrici a potom ime promenljive iza koga slede dva para uglastih zagrada . Na primer:

int M[10][5];

float T[3][4];

Ovako su deklarisana dva niza-matrice M i T. M je matrica koja ima 10 vrsta i 5 kolona a predviđena je za smeštanje celobrojnih vrednosti. T je matrica koja ima 3 vrste i 4 kolone a čuvaće realne brojeve jednostruke tačnosti.

Opšti oblik deklaracije matrice je:

tip_elementa ime_niza[BrojVrsta][BrojKolona]

U memoriji se elementi niza smeštaju redom po vrstama. Prvo redom elementi iz prve vrste. Odmah za njima redom elementi iz druge vrste, i tako, vrsta po vrsta.


Pristup članovima niza[uredi | uredi izvor]

Elementima niza se pristupa preko rednog broja unutar niza – preko indeksa niza. Na mestu indeksa se može pojaviti proizvoljan aritmetički izraz, s tim da vrednost izraza mora biti celobrojna. PR: Ako je deklarisan niz int ocene[V][K]; V i K su očekivani broj vrsta i kolona za obradu Pristup elementima niza je sledeći: ocene[i][j]
ocene[i][j] daje vrednost ocene u redu i a koloni j pri čemu mora da bude ispunjeno:

0<= i<V i 0<= j<K Dakle, prvi red je na indeksu 0, kao i prva kolona. Promenom indeksa i se pomeramo vertikalno duž kolone, dok se promenom indeksa j pomeramo duž vrste.

Na primer ako je niz deklarisan kao int ocene[30][12], imamo sledeću tabelu indeksa i,j

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


Inicijalizacija niza[uredi | uredi izvor]

Dodela početnih vrednosti podacima pri deklaraciji je inicijalizacija. Ako u programskom jeziku S nema inicijalizacije promenljivih, njihove vrenosti su nedefinisane. Jedino se statičke i spoljašnje promenljive automatski inicijalizuju nulama ako su brojčane promenljive. Ako želimo eksplicitno da dodelimo početne vrednosti elementima niza, moramo to uraditi ili u samoj deklaraciji niza, ili programski. Niz se može inicijalizovati navođenjem liste inicijalizatora u vitičastim zagradama, pa kako su elementi opet nizovi, oni se mogu navesti opet u vitičastim zagradama. Unutrašnje vitičaste zagrade se mogu i izostaviti. Dodela vrednosti se uvek obavlja po rastućem redosledu indeksa, kako su elementi i smešteni u memoriji. Broj inicijalizatora mora biti manji ili jednak broju elemenata niza. U slučaju da imamo manje inicijalnih vrednosti od broja elemenata u nizu, date vrednosti se dodeljuju elementima sa početka niza a preostali elementi dobijaju nulte početne vrednosti.

Sledeće inicijalizacije formiraju matrice istog sadržaja.

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

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

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

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

int a[][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

U poslednjem primeru je niz deklarisan kao int a[][4], što može biti zbunjujuće. Ovakav vid deklaracije je dozvoljen samo ako je navedena inicijalizacija. Dakle, moguće je izostaviti prvi indeks, tj. broj vrsta, jer se on može odrediti u fazi kompilacije na osnovu broja inicijalizatora. (Uopšte, deklaracija višedimenzionalnih nizova mora imati granicu za sve dimenzije osim prve, koja može biti izostavljena ako niz ima inicijalizaciju, pošto se može izračunati u fazi kompilacije na osnovu broja inicijalizatora i raspoloživih drugih dimenzija).

int a[][4]={1,2,3,4,5,6,7,8,9}; definiše istu matricu kao i int a[3][4]={{1,2,3,4},{5,6,7,8},{9}}

Primer pristupa preko indeksa: elementu sa vrednošću 6 se pristupa sa a[1][1].

I još neki primeri: int a[3][4]={{1,2},{3,4}}; definiše sledeći niz(matricu) a

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

int a[3][4]={0}; definiše niz a i popunjava sve elemente nulama

Kvadratna matrica[uredi | uredi izvor]

Ako je broj vrsta matrice jednak broju kolona, radi se o kvadratnoj matrici. Za kvadratnu matricu su moguće dodatne obrade vezane za glavnu i sporednu dijagonalu. Pripadnost glavnoj dijagonali se određuje tako što su indeks vrste i kolone međusobno jednaki.

Literatura[uredi | uredi izvor]

  • 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 Beograde, Beograd , (2015). rr. 137-138

Reference[uredi | uredi izvor]

  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

Spoljašnje veze[uredi | uredi izvor]