((( ako želite da preskočite objašnjenja i odete direktno na kratak sadržaj lekcije sa časa kliknite na sledeći LINK. )))
((( ako želite da preskočite objašnjenja i odete direktno na rešene primere zadataka sa časa kliknite na sledeći LINK. )))

Niz predstavlja kolekciju podataka istog tipa smeštenih u memoriji u uzastopnim memorijskim lokacijama kao što prikazuje sledeća slika.

P[0]

P[1]

...

P[n-2]

P[n-1]

U gornjem primeru prikazan je slučaj jednog niza od n elemenata (zapazite da brojanje počinje od 0), gde čitav niz ima zajedničko ime P. Pojedinačnom elementu niza pristupa se tako što se pored imena niza u zagradi navede i redni broj (indeks) tog elementa u nizu. Tako je p[14] podatak koji se nalazi u 15-tom elementu niza P.

Nizovi su standardan element u programskim jezicima i obično se definišu (deklarišu) na početku programa kao u sledećem primeru iz jezika C.

int kolicina[100];

Napomena: U C++, nizove možete deklarisati bilo gde u programu (amo u C mora na početku).

Ovde je deklarisan niz sa imenom kolicina od 100 elemenata, celobrojnog tipa.

******

Dakle,u nizovima se pod jednim nazivom (jednom promenljivom) može zabeležiti više vrednosti, kojima se pristupa preko indeksa (odnosno rednog broja).

Svaka pojedina vrednost u nizu se naziva elemenat ili član niza. Tako bi niz sa 5 elemenata (od kojih svaki sadrži recimo neki string) u memoriji izgledao npr. ovako:

Indeks 0 1 2 3 4
Vrednost "Milan" "Jovan" "Petar" "Lazar" "Zoran"

Svakom elementu niza pristupamo preko njegovog indeksa koji navodimo u uglastoj zagradi. To bi značilo, da ako niz a ima N elemenata, onda bi sve to izgledalo ovako:

Indeks 0 1 2 ... N-1
Element a[0] a[1] a[2] ... a[N-1]
Vrednost "Milan" "Jovan" "Petar" ... "Zoran"

Obavezno pravite razliku između sledeće dve stvari:

a1 Obična promenljiva koja se zove a1.
a[1] Element niza a sa indeksom 1.

Ok, zašto su nam nizovi toliko važni? Jednostavno, kad malo razmislimo - indeksi su celobrojne vrednosti. To znači da kao indeks ne moramo da zadamo samo bukvalan broj, npr. a[5], već to može biti i promenljiva (koja sadrži celobrojnu vrednost) kao npr. a[i] ili čitav izraz (čiji je rezultat celobrojna vrednost), kao npr. a[x+2]. Ovo nam otvara ogromne mogućnosti za automatizaciju rada sa velikom količinom podataka.

***  Priprema niza  ***

U programskom jeziciku C (i C++), nizove moramo da deklarišemo na određen broj elemenata, odnosno da obavestimo računar koliko će niz maksimalno biti velik. Ovo je zato što je niz generalno "primitivna" struktura - praktično samo komad memorije koju računar unapred odvoji za podatke.

***  Prednosti i nedostaci nizova  ***

Nizove moramo deklarisati, i to tako što navedemo koliko će niz imati elemenata. Sem toga, moramo navesti i kog su tipa članovi niza.

Pošto su svi elementi istog tipa, svaki zauzima istu količinu memorije, tako da se pozicija svakog člana lako računa na osnovu indeksa. Samim tim nizovi su veoma efikasni i brzi.

Međutim, očigledno je da nizovi nisu fleksibilni i mogu biti memorijski zahtevni.

U C-u se moralo na početku prgrama unapred odrediti koliko će maksimalno biti elemenata u nizu i da se zauzme memorija. Na sreću, ne moramo tako da radimo u C++: ovde možemo da na primer unesemo broj elemenata niza, a onda da deklarišemo niz sa toliko elemenata !

*** primer:

U sledećem primeru ćemo pokušati da ovo što jednostavnije objasnimo:

Recimo da imamo problem gde nam je potrebno da unesemo 100 brojeva u program. Da ne bismo imali cin komandu 100 puta u programu za ovako nešto želimo da upotrebimo petlju.

Postoji način da jednom komandom definišemo koliko god želimo promenljivih: ovaku grupu promenljivih nazivamo niz. Niz se definiše vrlo slično običnoj promenljivoj. Tako ako recimo hoćemo da definišemo niz od 100 celobrojnih promenljivih kao što nam treba u našem primeru to bismo uradili sledećom komandom:

int brojevi[100];

Ova komanda definiše u memoriji niz od 100 promenljivih pod nazivom "brojevi". Promenljive koje čine ovaj niz su numerisane od 0 do 99. Obratite pažnju, numerisanje uvek počinje od 0 i ide do dužine niza minus 1.

Shvatite to ovako: a[0], a[1], ... a[i], ... - slovo a je nayiv niza, a broj unutar zagrada je KOLIKO ELEMENATA TREBA PRESKOČITI OD POČETKA NIZA DO TOG ELEMENTA!

Kako pristupamo ovim promenljivim? Tako što posle imena niza u uglastim zagradama prosledimo kom elementu želimo da pristupimo. Tako na primer, ako želimo da pristupimo prvom elementu u nizu, koji ima indeks 0, to radimo tako što napišemo brojevi[0].

Kada pristupimo elementu niza možemo sa njim raditi sve što možemo i sa običnom promenljivom: koristiti ga u računici, postavljati mu vrednost, itd.

Pogledajmo jedan primer, gde ćemo naznačiti u komentarima koje je stanje u memoriji nakon svake komande:

int main()
{
int brojevi[3];    /* brojevi[0]: nije definisano;
brojevi[1]: nije definisano;
brojevi[2]: nije definisano */


brojevi[0] = 2;  /* brojevi[0]: 2,
brojevi[1]: nije definisano,
brojevi[2]: nije definisano */


brojevi[2] = 4;  /* brojevi[0]: 2,
brojevi[1]: nije definisano,
brojevi[2]: 4 */


brojevi[1] = brojevi[0] + brojevi[2];    /* brojevi[0]: 2,
brojevi[1]: 6,
brojevi[2]: 4 *
/
}

Kada hoćemo da pristupimo elementu niza ne moramo obavezno napisati samo broj u uglastim zagradama. Možemo u njih staviti bilo koji izraz koji kada se izračuna ima celobrojnu vrednost. Pogledajmo sledeći primer:

int main()
{
int indeks = 0;
int brojevi[3];   /* brojevi[0]: nije definisano,
// brojevi[1]: nije definisano
// brojevi[2]: nije definisano
*/

brojevi[indeks] = 1;  /* brojevi[0]: 1,
// brojevi[1]: nije definisano
// brojevi[2]: nije definisano
*/

brojevi[indeks + 1] = 2;   /* brojevi[0]: 1,
// brojevi[1]: 2,
// brojevi[2]: nije definisano */

brojevi[indeks + 2] = 5;   /* brojevi[0]: 1,
// brojevi[1]: 2 ,
// brojevi[2]: 5 */

}

Napomena: Niz se ne mora sastojati od celobrojnih promenljivih, već može biti bilo kog tipa koji smo do sada videli.

****

Ukratko:

  1. Da biste uopšte koristili niz, na početku ga je potrebno deklarisati. Deklaracija podrazumeva da se prvo navede tip promenljivih koji se koristi u nizu, zatim se navodi ime niza, i u uglastim zagradama se upisuje maksimalni broj članova koje taj niz može da ima u našem programu:

tip_promenljive    Ime_Niza[broj_clanova_niza];

  • Inicijalizacija: Na početku se, prilikom deklaracije niza - u istom koraku mogu navesti početne vrednosti za članove niza. To se zove inicijalizacija. postoji više načina kako se to može izvesti:

int brojevi[3] = {1, 3, 5}; /* brojevi[0] =1; brojevi[1]=3; brojevi[2]=5; */

U prethodnoj liniji koda je svakom od elemenata niza prilikom deklaracije postavljena i početna vrednost.

Ako se desi da se ne navede početna vrednost za sve članove niza, već ako se navede manji broj početnih vrednosti nego što je članova niza, tada će se kao početna vrednost u ostale članove niza postaviti 0 ! Na primer:

int brojevi[3] = {1, 3}; /* brojevi[0] =1; brojevi[1]=3; brojevi[2]=0; */

Ako se na početku uopšte ne navedu početne vrednosti elemenata niza (nema inicijalizacije) - tada će sadržaj u pojedinim elementima niza biti nešto što se zateklo u memorijskoj lokaciji koja je dodeljena tom članu niza (čitaj: ĐUBRE).

Međutim, ako prilikom inicijalizacije navedete više početnih vrednosti nego što je elemenata niza, dobićete GREŠKU prilikom kompajliranja !

Ispravno je čak da se izvrši deklaracija i inicijalizacija na sledeći način:

int brojevi[]={1,2,3};

U ovom slučaju će kompajler da pretpostavi da je onoliko elemenata u nizu koliko ste naveli kao početnih vrednosti pa će tada kompajler da deklariše niz od 3 elementa i u njih da postavi navedene početne vrednosti.

  • Pristupanje elementima niza se obavlja tako što se navede ime niza, i u uglastim zagradama INDEX člana niza kojem se pristupa. Na primer:

brojevi[0] = 4;

brojevi[1] = 2 * brojevi[0];

brojevi[2] = brojevi[0] * brojevi[1];

Prvi elemenat u nizu se označava indeksom 0, a ne 1 !

Indeks niza može da bude proizvoljan izraz CELOBROJNE vrednosti, npr:

brojevi[i*2] = 5;

  • Unos elemenata niza se najčešče može vršiti pomoću for petlje:

for(i=0; i<3; i++)

cin>>brojevi[i];

  • Štampanje elemenata niza (na primer na ekran)  se takođe najčešće vrši pomoću for petlje:

for(i=0; i<3; i++)

cout<<brojevi[i];

 

*** primeri:

 

1. Napraviti niz celobrojnih elemenata koji će se zvati a, od 7 elemenata, postaviti vrednosti elemenata redom na 1, 2, 3, 4, 5, 6, 7  i onda ispisati taj niz na ekranu.

 #include <iostream>
using namespace std;
int main()
{
int a[7]={1, 2, 3, 4, 5, 6, 7};  /* deklaracija i inicijalizacija ujedno */
int i;                           /* pomocna promenljiva koju cemo koristiti */
for(i=0; i<7; i++)
cout<< a[i]<<endl;

return 0;
}

2. Prethodni primer izmeniti tako da se umesto inicijalizacije niza unesu elementi niza sa tastature.

(Ovde treba koristiti još jednu for petlju za unos elemenata niza)

#include <iostream>
using namespace std;
int main()
{
int a[7];  /* deklaracija niza*/
int i;            /* pomocna promenljiva koju cemo koristiti */

cout<<"Unesite elemente niza -> "<<endl;
for(i=0; i<7; i++)
cin >> a[i];

cout<<"Elementi niza su :"<<endl;
for(i=0;i<7;i++)
cout<<a[i]<<endl;

return 0;
}

3. Prethodni primer izmeniti tako da se izvrši sabiranje svih elemenata niza i dobijena suma treba da se ispiše na ekranu:

 #include <iostream>
using namespace std;
int main()
{
int i, a[7];  /* deklaracija pomoćne promenljive i deklaracija niza u istom redu */
int suma=0;     /* promenljiva koju cemo koristiti za sumu elemenata niza */

cout<<"Unesite elemente niza -> "<<endl;
for(i=0; i<7; i++)
cin >> a[i];

for(i=0; i<7; i++)

suma = suma + a[i];

cout<<"Suma elemenata niza je:"<<suma<<endl;

return 0;
}

4. Prethodni primer izmeniti tako da se izvrši sabiranje elemenata koji su veći od 11 (obratite pažnju da ako u nizu nema elemenata koji su veći od 11, suma će biti nula)

 #include <iostream>
using namespace std;
int main()
{
int i, a[7];  /* deklaracija pomoćne promenljive i deklaracija niza u istom redu */
int suma=0;     /* promenljiva koju cemo koristiti za sumu elemenata niza */

cout<<"Unesite elemente niza -> "<<endl;
for(i=0; i<7; i++)
cin >> a[i];

for(i=0; i<7; i++)
if(a[i]>11)

suma = suma + a[i];

cout<<"Suma elemenata niza koji su veci od 11 je:"<<suma<<endl;

return 0;
}

Last modified: Saturday, 5 December 2020, 10:58 PM