06. Nizovi - jednodimenzioni

 

NIZOVI

Kod osnovnih ugrađenih Java tipova podataka koje smo do sada upoznali svaki identifikator odgovara jednoj promenljivoj. Međutim, kada želimo da rukujemo skupom vrednosti istog tipa - npr. 1000 prvih faktorijela - nemoguće je i nepraktično da se svaki pojedinačno imenuje. Niz je način kako se to rešava.

Niz je imenovana grupa promenljivih istog tipa. Svaka promenljiva u nizu se naziva element niza i pristupa joj se pomoću indeksa. Indeks je pozicija elementa u odnosu na početak niza. Indeksi (pozicije) počinju od 0; tako prvi element ima indeks 0, drugi 1 i tako redom. Indeks može biti bilo koji izraz koji daje int (celobrojnu) vrednost 0 ili veću.

Deklaracija niza je zadavanje imena promenljive niza:

int[] mesec; // originalna notacija

int mesec[]; // alternativna notacija

Na ovaj način nije određen broj elemenata i time nije dodeljena nikakva memorija nizu, samo je imenovana refenca na niz (koja sadrži adresu niza);

Nazad na početak: 06. Nizovi - jednodimenzioni

 

Definicija niza pravi niz (definiše mu se dužina, dodeljuje memorija i upisuje referenca u promenljivu niza). Ovako stvoreni niz se inicijalizuje na podrazumevanu vrednost automatski (za numeričke vrednosti na 0 ili 0.0, logičke na false, znakovne na ‘\u0000’).

mesec = new int [12]; // definicija niza od 12 promenljivih tipa int

Deklaracija i definicija mogu se izvršiti i u jednom koraku:

int[] mesec = new int [12];
char[] slovo = new char [30];
double[] srednja_ocena = new [33];

Pristup elementima niza se vrši pomoću promenljive niza i indeksa elementa u nizu. Peti element niza mesec referišemo kao mesec[4]. Java proverava da li su vrednosti indekasa koji se koriste ispravne. U slučaju da nisu (indeks manji od nula ili veći od broja elemenata niza) pojaviće se izuzetak. Izuzeci su način da se signalizira greška prilikom izvršavanja programa i različitim greškama odgovaraju različiti izuzeci. U ovom slučaju se izuzetak naziva IndexOutOfBoundsException. Kada se pojavi ovaj izuzetak program prekida izvršavanje (i može preći na obradu izuzetaka, ako je prethodno definisana - o tome kasnije).

Promenljiva niza je odvojena od samog niza. Moguće je koristiti promenljivu niza za referenciranje različitih nizova u različitim tačkama u programu.

Primer

int[] temperatura = new int [31]; // dodeljivanje 31 celobrojnih elemenata
...
temperatura = new int [365]; //novo dodeljivanje 365 elemenata - ovo je novi niz

Nazad na početak: 06. Nizovi - jednodimenzioni

 

Inicijalizacija nizova se može izvršiti pri samoj deklaraciji i definiciji, kao na primer:

int[] temperatura = {22, 23, 26, 28, 25, 21, 18, 17}; //inicijalizacija niza od 8 elemenata

Na ovaj način se veličina niza određuje brojem inicijalnih vrednosti, tako da je potrebno navesti inicijalne vrednosti za sve elemente niza. Ako je potrebno navesti inicijalne vrednosti samo za neke elemente niza, onda se dodeljuje vrednost određenim elementima:

int[] temperatura = new int[365];
temperatura[0] = 22;
temperatura[7]=18;

Niz se može inicijalizovati na još jedan način, drugim postojećim nizom:

int[] temperatura = {22, 23, 26, 28, 25, 21, 18, 17};
int[] dnevna_temp = temperatura;

Primena. Elementi nizova se koriste kao i obične promenljive istog tipa.

Primer unosa elemenata niza,
        Scanner ul=new Scanner(System.in);
        System.out.println("duzina niza:");
        int duzina=ul.nextInt();        
        int [] niz = new int [duzina];
        for (int i =0; i<duzina; i++){
        System.out.println("niz["+i+"]=");
        niz[i]=ul.nextInt();   

i ispisa elemenata niza

System.out.println("El. niza duzine "+duzina+" su:");
for (int i =0; i<duzina; i++)
System.out.println("niz["+i+"]="+niz[i]);


Primer, izračunavanje sume i srednje vrednosti elemenata niza:

int [] temp = new int [31];
double suma=0.0, srednjaVrednost=0.0;
...
for (int i =0; i<31; i++)
suma += temp[i];
srednjaVrednost= suma / 31;
int [] temp = new int [31];


double suma=0.0, srednjaVrednost=0.0;
...
for (int i =0; i<temp.lenght; i++)
suma += temp[i];
srednjaVrednost = suma / temp.lenght;


Prvi primer koristi eksplicitnu dužinu niza, što nije preporučljivo. Naknadne izmene dužine niza mogu dovesti do toga da se ne promene sve vrednosti gde se koristi dužina i dovesti do greške. Dužina niza se može referencirati upotrebom lenght člana kao u drugom primeru.

Nazad na početak: 06. Nizovi - jednodimenzioni

 

Vežbe

I Podaci o elementima niza

Z6.I.1. Izračunati sumu i srednju vrednost elemenata niza
a) svih.
b) pozitivnih,
c) deljivih sa 5,
d) negativnih i neparnih.

Z6.I.2. Najmanji, najveći element niza
a) najmanji,
b) najveći,
c) najmanji i najveći po apsolutnoj vrednosti,
d) indeks najmanjeg / najvećeg elementa,
e) najveći element. Koliko ima takvih elemenata.
- Kada je poznata dužina niza,
- Niz se završava unosom vrednosti 0 za vrednost elementa niza

Z6.I.3. Koji element niza (i njegov indeks) je najbliži (po apsolutnoj vrednosti) srednjoj vrednosti niza.

Z6.I.4. Koliko elemenata niza je veće, a koliko manje od srednje vrednosti niza.

Nazad na početak: 06. Nizovi - jednodimenzioni

 

 II Modifikacija niza

Z6.II.1.
a) Pomnožiti svaki element niza sa k
b) Dodati na svaki element niza k
i prikazati novodobijeni niz.

Z6.II.2. Zameniti sve:
a) neparne elemente niza nulama.
b) negativne elemente njihovim apsolutnim vrednostima.

Z6.II.3. Zameniti mesta:
a) n-tom i m-tom,
b) najvećem i najmanjem
elementu niza.

Z6.II.4. Obrnuti redosled elemenata niza

Z6.II.5. Urediti niz u:
a) opadajući,
b) rastući,
c) nerastući,
d) neopadajući.

Z6.II.6. Iz niza izbaciti:
a) maksimalne i minimalne elemente,
b) sve negativne (parne) elemente.

Z6.II.7. Iz niza izbaciti sve elemente čija je vrednost jednaka k.
Ako nema takvih elemenata, onda izbaciti element koji je najbliži k po apsolutnoj vrednosti.

Z6.II.8. U uređeni niz dodati novih k elemenata (sa tastature) tako da niz ostane uređen.

Nazad na početak: 06. Nizovi - jednodimenzioni

 

III Jedan niz u jedan niz

Z6.III.1. Iskopirati elemente niza A u niz B.

Z6.III.2. Formirati niz B tako što se elementi niza A:
a) pomnože sa k,
b) uvećaju za k.

Z6.III.3. Formirati niz B tako što se pozitivni elementi niza A iskopiraju, a na mesto negativnih elemenata upisuje 0.

Z6.III.4. Formirati niz B od:
a) negativnih,
b) parnih,
elemenata niza A.

Z6.III.5. Formirati niz B od elemenata niza A koji su veći od srednje vrednosti.

Nazad na početak: 06. Nizovi - jednodimenzioni

 

IV Jedan niz u više nizova

Z6.IV.1. Formirati nizove B i C tako što se elementi niza A:
a) pomnože / podele sa k,
b) uvećaju / umanje za k.

Z6.IV.2. Formirati nizove B i C tako što se u B pozitivni elementi niza A iskopiraju, a na mesto negativnih elemenata upisuje 0, a u C se kopiraju negativni.

Z6.IV.3. Formirati nizove B i C od:
a) negativnih / pozitivnih,
b) parnih / neparnih,
elemenata niza A.

Z6.IV.4. Formirati nizove B i C od elemenata niza A koji su veći / manji od srednje vrednosti.

Z6.IV.3. Formirati nizove B, C i D od elemenata niza A tako što se u:
- B kopiraju elementi deljivi sa 3,
- C kopiraju elementi koji imaju ostatak 1 pri deljenju sa 3,
- D kopiraju elementi koji imaju ostatak 2 pri deljenju sa 3.

Nazad na početak: 06. Nizovi - jednodimenzioni

 

V Više nizova u jedan niz

Z6.V.1. Formirati niz C tako što se na niz A nadovezuje niz B. Kolika je dužina niza C.

Z6.V.2. Formirati niz C učešljavanjem elemenata nizova A i B. A i B su iste dužine.

Z6.V.3. Kao prethodni, za različite dužne nizova A i B.
a) kada ponestane elemenata iz kraćeg niza, dodavati 0,
b) kada ponestane elemenata iz kraćeg niza, dodavati samo elemente dužeg niza.

Z6.V.4. Nizovi A, B, C su dužine n. Formirati C, tako da je i-ti element C:
a) srednja vrednost i-tih elemenata A i B,
b) apsolutna vrednost razlike,
c) veći

Z6.V.5. C=A+B.

Nazad na početak: 06. Nizovi - jednodimenzioni

 

VI Primena u zadacima

Z6.VI.1. Meri se temperatura godinu dana u podne i u ponoć i podaci se smeštaju u nizove Podne i Ponoc. Odrediti:
a) koja je bila najveća / najmanja temperatura, koliko puta i kada;
b) koja je bila prosečna temperatura za tu godinu;
c) koliko puta je temperatura bila manja od -10o C, a koliko puta veća od +40 oC.

Z6.VI.2. Meri se temperatura 5 godina u podne i podaci se smeštaju u nizove A, B, C, D i E. Odrediti:
a) najveću i najmanju temperaturu u ovom periodu, i koje je godine bila;
b) prosečnu temperaturu za svaku godinu;
c) prosečnu temperaturu u 5 godina za svaki datum (i podatke smestiti u niz F).

Z6.VI.3. Gosti se prilikom dolaska na zabavu prijavljuju, a prilikom odlaska odjavljuju sa zabave. Odrediti:
a) koliko je bilo gostiju u ponoć,
b) u kom trenutku je bilo najviše, a u kom trenutku najmanje gostiju,
c) da li su se osobe oA i oB mogle sresti na zabavi.
Pretpostavlja se da je zabava počela u 21h i trajala do 01h. Tačnost evidencije dolaska i odlaska je 1 minut.

Nazad na početak: 06. Nizovi - jednodimenzioni