10-jednodimenzionalni nizovi.ppt - compatibility mode...početne vrednosti nakon deklaracije,...
TRANSCRIPT
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 kojisu istog tipa.
Vrednosne i referentne promenljive
Nizovisuuvekreferentnitipovi.
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 (nazivnizovne 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]; Console.WriteLine(niz.Length);
5
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 [ ]), odnosnoniz 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 standardnevrednosti 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 će imatipoč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 ciklusaint[] 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 (a[j] % 2 != 0)Console.Write(a[j] + " ");
}
for (int j = 0; j < a.Length; j++){
if (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]; }
} Console.WriteLine("\nSrednja vrednost je {0}", sum /=
brojac);
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);
Minimalna vrednost niza
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
indeksumin = 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);
Pretraga niza (2)
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);
Pronalaženje indeksa niza najmanjeg elementa.
Generisanje niza (1)
Formirajte niz od pet elemenata tipa double, azatim izvršiti formiranje šestog elementasabiranjem 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. Članovimasa parnim indeksimadodeliti vrednost 1, a članovima sa neparnimindeksima dodelitivrednost 0.
Ispisati članovedobijenog niza.
int i; int[ ] a = new int[15];
//Unosimo elemente nizafor (i = 0; i < 15; i++){
if(i % 2 == 0) //Ako je indeks parana[i] = 1;
else//Ako je indeks neparana[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++){suma = suma + niz[i];}Console.WriteLine(sum);double srednjaVrednost= sum / 10;Console.WriteLine(srednjaVrednost);Console.Read();
Naći sumu i srednju vrednost svih elemenata niza
Jednodimenzionalni nizovi -string
1. načinstring[ ] imeStudenta;imeStudenta = new string[5]; imeStudenta[0] = "Marko";imeStudenta[1] = "Janko";imeStudenta[2] = "Vuk";imeStudenta[3] = "Ana";imeStudenta[4] = "Jana";Console.WriteLine("Treci element niza je {0}", imeStudenta[2]);
2. način: sve u jednoj liniji kodastring[ ] imeStudenta = { "Marko", "Janko", "Vuk", "Ana", "Jana" };Console.WriteLine("Treci element niza je {0}", imeStudenta[2]);
Deklaracija niza od 5 elemenata
Dodeljivanjevrednostielementima nizapojedinačno
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\t{0}", 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);
Sortiranje niza //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);
Invertovanje članova niza
Console.WriteLine("Unesite broj članova niza:");int n = int.Parse(Console.ReadLine());double[] a = new double[n];for (int i = 0; i < a.Length; i++){//Formiramo niza[i] = i;}//Štampamo nizConsole.WriteLine("Originalni niz:");foreach (int i in a){Console.Write("a[{0}]=", i);Console.WriteLine(a[i]);}//Zamena mesta elemenata nizadouble[] b = new double[a.Length];for (int i = 0; i < a.Length; i++){
b[a.Length - i - 1] = a[i];}Console.WriteLine("Modifikovani niz:");for (int i = 0; i < a.Length; i++){
Console.Write("b[{0}]=",i);Console.WriteLine(b[i]);
} } }
int[] niz = { 0, 1, 2, 3, 4 };// Definisanje veličine nizaint duzina = niz.Length;// Deklarisanje i kreiranje inverznog nizaint[] invNiz = new int[duzina];
// Inicijalizacija inverznog nizafor (int index = 0; index < duzina;
index++){
invNiz[duzina - index - 1] = niz[index];}
// Štampanje inverznog nizafor (int index = 0; index < duzina;
index++){
Console.Write(invNiz[index]+" ");}
Console.ReadLine();
Invertovani niz
int[] niz = { 0, 1, 2, 3, 4 };for (int i = niz.Length ‐ 1; i >= 0; i‐‐) { Console.Write(niz[i] + " "); }