Osnove programiranja Nizovi
Sadržaj Definicija niza Vrste i elementi nizova Deklarisanje nizova Dodele (početne) vrednosti nizovima Jednodimenzionalni nizovi Primeri dodele vrednosti Petlja foreach
Nizovi - definicija U rešavanju raznih problema javlja se potreba za postojanjem većeg broja podataka istog tipa koje predstavljaju jednu celinu. Zbog toga se u programskim jezicima uvodi pojam niza ili u opštem slučaju pojam polja. Niz (eng. array) je indeksirani skup objekata koji su istog tipa.
Vrednosne i referentne promenljive Nizovi su uvek referentni tipovi.
Elementi i vrste Elementi niza numerisani su sa 0,1,2,,N-1. Ovi brojevi su indeksi elemenata niza. Broj elemenata u nizu predstavlja njegovu dužinu. Nizovi mogu biti različitih dimenzija. Najčešće se koriste jednodimenzionlani nizovi (vektori), dvodimenzionalni nizovi (matrice) i ugnježdeni (nizovi nizova).
Indeksi i deklarisanje nizova Elementima niza se pristupa preko zajedničkog imena (naziv nizovne promenljive) i fiksnog broja indeksa. Element jednodimenzionalnog niza ima jedan indeks, a n- dimenzionalni niz ima n indeksa. U slučaju jednodimenzionalnih nizova veličina niza se poistovećuje sa brojem njegovih elemenata, a indeks elementa se svodi na redni broj elementa u nizu. Prvi indeks je nula. Niz se deklariše na sledeći način: tip_elementa naziv_promenljive[velicina_niza];
Elementi niza istog su tipa (tip elemenata niza); smešteni su u susednim memorijskim lokacijama; brzina pristupa bilo kom elementu niza je ista; pristup im je omogućen preko indeksa;
Deklarisanje nizova Da bi se deklarisala nizovna promenljiva potrebno je: navesti tip elemenata niza, uglaste zagrade kojima se specificira rang niza, i ime nizovne promenljive iza kojeg sledi tačka zarez. Niz se deklariše na sledeći način: tip_elementa [ ] naziv_promenljive [veličina_niza]; Opciono
Neka svojstva System.Array klase Nizovni tipovi se implicitno izvode iz System.Array klase Length svojstvo koje vraća dužinu niza Rank svojstvo koje vraća broj dimenziju niza int[] niz = new int [5]; Console.WriteLine(niz.Rank); 1 int[] niz = new int[5]; 5 Console.WriteLine(niz.Length);
Metode System.Array klase Sort() sortira niz int[] niz= 0, 8, 26, 5, 3, 12; System.Array.Sort(niz); Console.WriteLine(niz[1]); 5
Deklarisanje jednodimenzionalnih nizova Primer deklarisanja niza: int[ ] red; U primeru promenljiva red je niz koji je tipa (int [ ]), odnosno niz celih brojeva. Elementi niza kreiraju se pozivom metode new (alokacija memorije) za svaki elemenat niza: Primeri: Deklarisanje i kreiranje niza od 6 elemenata koji su celi brojevi. int[ ] mojniz = new int[6]; Kreiranje niza od 5 elemenata koji su tipa string string [ ] imestudenta = new string[5];
Kreiranje niza int[ ] mojniz= new int[6]; Alocira se niz dužine 6 čiji su elementi tipa int. U dinamičkoj memoriji (hip) alocira se prostor za 6 celih brojeva koji su inicijalno postavljeni na 0.
Početne vrednosti Nakon deklaracije, elementi niza kao standardne vrednosti automatski dobijaju: 0, ako je niz numeričkog tipa (int ili double) Null, ako je niz referentnog tipa koji pokazuje na neki objekat (forma, dugme itd). Npr. ako deklarišemo niz: ocena = new int[3]; U memoriji će se rezervisati prostor za 3 ocene, ocena[0], ocena[1], ocena[2], a svaka ćeimati početnu vrednost 0, tj. ocena[0]=0, ocena[1]=0, ocena[2]=0.
Dodela vrednosti jednodimenzionalni nizovi numeričkog tipa 1. int[] mojniz = new int[6] 1, 2, 3, 4, 5, 6 ; //int[] mojniz = new int[] 1, 2, 3, 4, 5, 6 ; //int[] mojniz= 1, 2, 3, 4, 5, 6 ; Console.WriteLine(mojNiz[4]); 2. Moguće je izvršiti i direktnu dodelu vrednosti članova niza. int[] mojniz = new int[6]; mojniz[0] = 1; mojniz[1] = 2; mojniz[2] = 3; mojniz[3] = 4; mojniz[4] = 5; mojniz[5] = 6; Console.WriteLine(mojNiz[5]);
Jednodimenzionalni nizovi - int 3. Vrednosti se mogu pridružiti primenom for ciklusa int[] mojniz = new int[6]; for (int i = 0; i < 6; i++) mojniz[i] = i+1; Console.WriteLine(mojNiz[i]); 4. Članovi niza mogu se uneti i sa tastature: int[ ] mojniz = new int[6]; Console.WriteLine("Unesi vrednosti članova niza:"); for (int i = 0; i < 6; i++) mojniz[i] = int.parse(console.readline());
Broj i štampanje elemenata niza int[] br = 0, 8, 26, 5, 3, 12 ; Console.WriteLine("Broj elemenata u nizu je: " + br.length); //System.Array.Sort(br); int i = 0; while (i < br.length) Console.WriteLine("Broj[" + i + "]: " + br[i]); i = i + 1;
Jednodimenzionalni nizovi - int 5. Generisanje slučajnih vrednosti pomoću f-je Random: Random rnd = new Random(); int[] niz = new int[6]; for (int i = 0; i < niz.length; i++) niz[i] = rnd.next(1, 10); Console.WriteLine(niz[i]);
Korisnik definiše dužinu i elemente niza //Unosimo broj elemenata niza Console.WriteLine("Unesite dužinu niza n:"); int n = int.parse(console.readline()); int[] mojniz = new int[n]; Console.WriteLine("Unesi vrednosti članova niza:"); //Unosimo elemente niza for (int i = 0; i < n; i++) mojniz[i] = int.parse(console.readline()); Console.WriteLine("Uneli ste sledeće elemente:"); //Štampamo elemente niza for (int i = 0; i < n; i++) Console.WriteLine("mojNiz[" + i + "]=" + mojniz[i]);
Filtriranje elemenata niza (1) Napisati program koji pronalazi koliko puta se broj 1 pojavljuje u unetom nizu brojeva i na kojim indeksima. Random rnd = new Random(); int[] a = new int[10]; for (int i = 0; i < a.length; i++) a[i] = rnd.next(1, 10); Console.WriteLine(a[i]); int b=0; for (int i=0;i<a.length;i++) if (a[i] == 1) b++; Console.WriteLine("Broj 1 se pojavljuje na indeksu " + i); Console.WriteLine("Broj 1 se pojavljuje 0 puta", b);
Filtriranje elemenata niza (2) Šta prikazuju sledeći primeri? for (int j = 0; j < a.length; j++) Console.Write(a[j] + " "); j++; for (int j = 0; j < a.length; j++) if (j % 2 == 0) Console.Write(a[j] + " "); for (int j = 0; j < a.length; j++) if (a[j] % 2!= 0) Console.Write(a[j] + " ");
Filtriranje elemenata niza (3) Random rnd = new Random(); int[] a = new int[10]; for (int i = 0; i < a.length; i++) a[i] = rnd.next( 5, 5); Console.WriteLine(a[i]); int brojac = 0; for (int i = 0; i < a.length; i++) if (a[i] < 0) brojac++; Console.WriteLine("Broj negativnih brojeva je:"+brojac);
Filtriranje elemenata niza (4) Šta se dešava u sledećem nizu? //Generisati niz Console.WriteLine(" "); int brojac=0, sum = 0; for (int j = 0; j < a.length; j++) if (a[j] % 5 == 0) Console.Write(a[j] + " "); brojac++; sum += a[j]; brojac); Console.WriteLine("\nSrednja vrednost je 0", sum /=
Pretraga niza (1) Pronalaženje max elementa niza. Random rnd = new Random(); int[] a = new int[10]; for (int i = 0; i < a.length; i++) a[i] = rnd.next(1, 50); Console.WriteLine(a[i]); int max = a[0]; for (int j = 1; j < 10; j++) if (a[j] > max) max = a[j]; Console.WriteLine("\nNajveći član je 0", max);
int i,n; double min; double[] a = new double[50]; Console.WriteLine("Unesi broj clanova niza:"); n = int.parse(console.readline()); Console.WriteLine("Unesi elemente niza:"); for (i = 0;i < n;i++) a[i] = Double.Parse(Console.ReadLine()); //Postavljamo minimalni element na prvi clan niza, dok i odgovara njegovom indeksu min = a[0]; /*Dok while petljom ne stignemo da poslednjeg n-tog elementa niza proveravamo da li je tekuci element a[i] manji od min*/ i=0; while(i < n) if(a[i] < min) min = a[i]; /*Bez obzira da li je prethodni if uslov ispunjen ili nije, promenljiva i se uvecava za 1, kako bi se vrsilo uporedjivanje sa sledecim elementom u nizu*/ i = i + 1; Console.WriteLine( Najmanji elemenat niza je:" + min); Minimalna vrednost niza
Pretraga niza (2) Pronalaženje indeksa niza najmanjeg elementa. Random rnd = new Random(); int[] a = new int[10]; for (int i = 0; i < a.length; i++) a[i] = rnd.next(1, 10); Console.WriteLine(a[i]); int k = 0, b=0; for (int j = 1; j < a.length; j++) if (a[j] < a[k]) k = j; Console.WriteLine("\nNajmanji član je 0 na indeksu 1", a[k], k);
Generisanje niza (1) Formirajte niz od pet elemenata tipa double, a zatim izvršiti formiranje šestog elementa sabiranjem predhodnih pet elemenata i prikazati ga. double[ ] a = new double[6]; a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4; a[4] = 5; a[5] = a[0] + a[1] + a[2] + a[3] + a[4]; Console.WriteLine("Generisani element a[5] je 0", a[5]); /*for (int i = 0; i < a.length;i++ ) Console.WriteLine(a[i]);*/
Generisanje niza (2) Deklarisati niz tipa int, čiji će članovi biti kvadrati prvih 10 brojeva i ispisati ih. int[ ] niz = new int[10]; for (int i = 0; i < niz.length; i++) niz[i] = (i+1) * (i+1); Console.WriteLine(niz[i]);
Generisanje niza (3) Formirati niz koji ima 15 članova. Članovima sa parnim indeksima dodeliti vrednost 1, a članovima sa neparnim indeksima dodeliti vrednost 0. Ispisati članove dobijenog niza. int i; int[ ] a = new int[15]; //Unosimo elemente niza for (i = 0; i < 15; i++) if(i % 2 == 0) //Ako je indeks paran a[i] = 1; else //Ako je indeks neparan a[i] = 0; Console.WriteLine(a[i]); Console.ReadKey();
Primer double[] niz= 5, 2, 7, 3.5, 6.5, 8, 1, 9, 1, 3; double suma = 0; for (int i = 0; i < 10; i++) Naći sumu i srednju vrednost svih elemenata niza suma = suma + niz[i]; Console.WriteLine(sum); double srednjavrednost= sum / 10; Console.WriteLine(srednjaVrednost); Console.Read();
Jednodimenzionalni nizovi - 1. način string[ ] imestudenta; imestudenta = new string[5]; imestudenta[0] = "Marko"; imestudenta[1] = "Janko"; imestudenta[2] = "Vuk"; imestudenta[3] = "Ana"; imestudenta[4] = "Jana"; string Deklaracija niza od 5 elemenata Dodeljivanje vrednosti elementima niza pojedinačno Console.WriteLine("Treci element niza je 0", imestudenta[2]); 2. način: sve u jednoj liniji koda string[ ] imestudenta = "Marko", "Janko", "Vuk", "Ana", "Jana" ; Console.WriteLine("Treci element niza je 0", imestudenta[2]);
Jednodimenzionalni nizovi - char char[ ] samoglasnik = new char[5]; samoglasnik[0] = 'a'; samoglasnik[1] = 'e'; samoglasnik[2] = 'i'; samoglasnik[3] = 'o'; samoglasnik[4] = 'u'; // char[] samoglasnik = new char[] 'a','e','i','o','u' ; for (int i=0; i < 5;i++ ) Console.WriteLine(samoglasnik[i]);
Petlja foreach Foreach petlja se koristi kod skupa elemenata. Skup elemenata može biti neki niz ili nabrojivi objekat. Opšti oblik foreach petlje je: foreach (tip promenljiva in izraz) <telo ciklusa> Promenljiva u foreach petlji koristi se za pristup svim elementima u datom u izrazu. Izraz može biti niz.
Petlja foreach 1. string[] radnidani = "ponedeljak", "utorak", "sreda", "četvrtak", "petak" ; Console.WriteLine("Radni dani u nedelji su:\n"); foreach (string dan in radnidani) Console.WriteLine(dan);
Petlja foreach 2. Naredba foreach prolazi (iterira) kroz svaki element u nabrojivom objektu. char[ ] samoglasnik = new char[5]; samoglasnik[0] = 'a'; samoglasnik[1] = 'e'; samoglasnik[2] = 'i'; samoglasnik[3] = 'o'; samoglasnik[4] = 'u'; foreach (char znak in samoglasnik) Console.WriteLine("Samoglasnik:"+znak+" "); char[] samoglasnik = new char[5] 'a','e','i','o','u'; for (int i=0; i < samoglasnik.length;i++ ) Console.WriteLine("0.samoglasnik je: 1", i+1,samoglasnik[i]);
Petlja foreach 3. Console.WriteLine("Upišite neku rečenicu:"); string recenica = Console.ReadLine(); int duzina = recenica.length, veliko = 0, malo = 0, broj = 0, sk = 0, sp = 0; foreach (char c in recenica) if (Char.IsUpper(c)) veliko++; //broji velika slova else if (Char.IsLower(c)) malo++; else if (Char.IsDigit(c)) broj++; else if (Char.IsPunctuation(c)) sk++; else if (Char.IsWhiteSpace(c)) sp++; Console.WriteLine(); Console.WriteLine("Velikih slova:\t\t" + veliko); Console.WriteLine("Malih slova:\t\t" + malo); Console.WriteLine("Brojeva:\t\t" + broj); Console.WriteLine("Specijalnih karaktera:\t" + sk); Console.WriteLine("Praznih mesta:\t\t" + sp); Console.WriteLine("Broj slova:\t\t0", veliko + malo); Console.WriteLine("Ukupno:\t\t\t" + duzina);
Petlja foreach 4. Console.WriteLine("Upišite neku rečenicu:"); string recenica = Console.ReadLine(); Console.WriteLine("Unesite neki karakter:"); char slovo = char.parse(console.readline()); int i = 0; foreach (char c in recenica) if (c == slovo) i++; Console.WriteLine(); Console.WriteLine("Izabrani karakter se pojavljuje 0 puta ",i);
//Generise se niz od 10 elemenata slucajnih brojeva od 10 do 50 Random rnd = new Random(); int[] niz = new int[10]; for (int i = 0; i < niz.length; i++) niz[i] = rnd.next(1, 50); Console.WriteLine(niz[i]); Console.WriteLine(" "); //Ove dve for petlje sortiraju niz for (int i = 0; i < 9; i++) for (int j = i + 1; j < 10; j++) int pom; if (niz[i] > niz[j]) pom = niz[i];//zamena mesta promenljivih niz[i] = niz[j]; niz[j] = pom; //Ova foreach petlja stampa sortirani niz foreach (int broj in niz) Console.WriteLine(broj); Sortiranje niza