Definisanje nizovnih promenljivih, ciklus foreach i sistemske metode za rad sa nizovima
1. Uvod – zašto nam trebaju nizovi?
Do sada smo promenljivu koristili za čuvanje jedne vrednosti.
Na primer:
int broj = 25;
Ako želimo da čuvamo ocene pet učenika, mogli bismo Napravititi pet promenljivih:
int ocena1 = 5;
int ocena2 = 4;
int ocena3 = 3;
int ocena4 = 5;
int ocena5 = 4;
Međutim, kada imamo veći broj podataka, ovakav način postaje nepraktičan.
Za čuvanje većeg broja podataka istog tipa možemo koristiti niz (array).
Niz omogućava da više vrednosti čuvamo pod jednim imenom.
Na primer:
int[] ocene = { 5, 4, 3, 5, 4 };
Ovde promenljiva ocene predstavlja niz od pet celih brojeva.
2. Definisanje niza
Jedan od načina na koji niz može da se definiše je tako što navedemo:
-
tip podataka,
-
uglaste zagrade
[], -
naziv promenljive.
Na primer:
int[] brojevi;
Ovim smo definisali niz celih brojeva pod nazivom brojevi.
Možemo definisati nizove različitih tipova:
int[] brojevi;
double[] temperature;
string[] imena;
bool[] odgovori;
Tip ispred [] određuje kakve podatke niz može da sadrži.
3. Kreiranje niza
Možemo odmah navesti vrednosti elemenata:
int[] brojevi = { 10, 20, 30, 40, 50 };
Niz sada sadrži pet elemenata.
Možemo ga zamisliti ovako:
brojevi
↓
+----+----+----+----+----+
| 10 | 20 | 30 | 40 | 50 |
+----+----+----+----+----+
0 1 2 3 4
Brojevi ispod elemenata predstavljaju indekse.
4. Indeksi niza
Pravilo kod nizova je:
Indeks prvog elementa je 0.
Za niz:
int[] brojevi = { 10, 20, 30, 40, 50 };
važi:
brojevi[0] → 10
brojevi[1] → 20
brojevi[2] → 30
brojevi[3] → 40
brojevi[4] → 50
Elementu pristupamo pomoću uglastih zagrada:
Console.WriteLine(brojevi[0]);
Ispisuje se:
10
Na primer:
Console.WriteLine(brojevi[3]);
ispisuje:
40
5. Promena vrednosti elementa
Vrednost određenog elementa možemo promeniti pomoću njegovog indeksa.
Na primer:
int[] brojevi = { 10, 20, 30, 40, 50 };
brojevi[2] = 100;
Niz sada izgleda:
10 20 100 40 50
Dakle:
brojevi[2]
više nema vrednost 30, već 100.
6. Broj elemenata – Length
Osobina Length daje broj elemenata niza.
Na primer:
int[] brojevi = { 10, 20, 30, 40, 50 };
Console.WriteLine(brojevi.Length);
Rezultat:
5
Dakle:
brojevi.Length → broj elemenata niza
Ako niz ima 5 elemenata, poslednji indeks je 4.
Zato važi:
broj elemenata = 5
poslednji indeks = 4
7. Prolazak kroz niz pomoću for
Pošto već znamo for, možemo ga koristiti za prolazak kroz sve elemente niza.
int[] brojevi = { 10, 20, 30, 40, 50 };
for (int i = 0; i < brojevi.Length; i++)
{
Console.WriteLine(brojevi[i]);
}
Rezultat:
10
20
30
40
5
Length nam omogućava da program ne zavisi od tačnog broja elemenata.
8. foreach – jednostavan prolazak kroz niz
C# ima posebnu petlju koja je veoma pogodna za prolazak kroz elemente niza.
To je:
foreach
Osnovni oblik je:
foreach (tip promenljiva in niz)
{
// naredbe
}
Na primer:
int[] brojevi = { 10, 20, 30, 40, 50 };
foreach (int broj in brojevi)
{
Console.WriteLine(broj);
}
Rezultat:
10
20
30
40
50
Možemo čitati:
„Za svaki
broju nizubrojevi, izvrši naredbe iz bloka.“
9. for i foreach
Isti zadatak možemo uraditi pomoću for:
for (int i = 0; i < brojevi.Length; i++)
{
Console.WriteLine(brojevi[i]);
}
ili pomoću foreach:
foreach (int broj in brojevi)
{
Console.WriteLine(broj);
}
foreach je često jednostavniji kada želimo samo da pročitamo ili obradimo svaki element niza.
Kod foreach ne moramo ručno da koristimo indeks.
10. Niz stringova
Možemo napravititi niz stringova:
string[] imena = { "Ana", "Marko", "Petar", "Jelena" };
Ispis pomoću foreach:
foreach (string ime in imena)
{
Console.WriteLine(ime);
}
Rezultat:
Ana
Marko
Petar
Jelena
11. Sistemsке metode za rad sa nizovima
C# i .NET imaju gotove metode koje nam olakšavaju rad sa nizovima.
Jedna od važnih klasa je:
Array
Klasa Array sadrži različite metode za rad sa nizovima.
Na primer:
Array.Sort()
služi za sortiranje elemenata niza.
12. Sortiranje niza – Array.Sort()
Pogledajmo primer:
int[] brojevi = { 50, 10, 40, 20, 30 };
Array.Sort(brojevi);
Nakon sortiranja niz izgleda:
10 20 30 40 50
Možemo ga ispisati pomoću foreach:
foreach (int broj in brojevi)
{
Console.WriteLine(broj);
}
Dakle:
Array.Sort() → sortira elemente niza
13. Pretraga – Array.IndexOf()
Možemo proveriti na kom indeksu se nalazi određena vrednost.
Za to možemo koristiti:
Array.IndexOf()
Primer:
int[] brojevi = { 10, 20, 30, 40, 50 };
int indeks = Array.IndexOf(brojevi, 30);
Console.WriteLine(indeks);
Rezultat:
2
Jer se broj 30 nalazi na indeksu 2.
Ako tražena vrednost ne postoji u nizu, metoda vraća:
-1
Napomena
Na ovom času nije potrebno učiti veliki broj metoda klase
Arraynapamet. Važno je upoznati princip: .NET već ima gotove metode koje možemo koristiti za različite operacije nad nizovima.
14. Primer – niz ocena
Pogledajmo kompletan primer:
int[] ocene = { 5, 4, 3, 5, 4 };
Console.WriteLine("Ocene:");
foreach (int ocena in ocene)
{
Console.WriteLine(ocena);
}
Console.WriteLine("Broj ocena: " + ocene.Length);
Program prikazuje sve ocene i broj elemenata niza.
15. Primer – pronalaženje broja
Možemo kombinovati niz, foreach i if.
int[] brojevi = { 5, 12, 8, 20, 3 };
foreach (int broj in brojevi)
{
if (broj > 10)
{
Console.WriteLine(broj);
}
}
Rezultat:
12
20
Ovde povezujemo gradivo iz prethodnih lekcija:
niz
↓
foreach
↓
if
16. Kada koristiti for, a kada foreach?
Možemo zapamtiti jednostavno pravilo.
Koristi foreach kada:
-
želiš da prođeš kroz sve elemente,
-
potreban ti je sam element,
-
ne treba ti indeks elementa.
Primer:
foreach (string ime in imena)
{
Console.WriteLine(ime);
}
Koristi for kada:
-
potreban ti je indeks,
-
želiš da pristupiš određenom elementu pomoću indeksa,
-
želiš da menjaš elemente niza prema indeksu.
Primer:
for (int i = 0; i < brojevi.Length; i++)
{
brojevi[i] = brojevi[i] * 2;
}
17. Najvažnije što treba zapamtiti
Niz omogućava da pod jednim imenom čuvamo više podataka istog tipa.
Primer:
int[] brojevi = { 10, 20, 30, 40, 50 };
Elementima pristupamo pomoću indeksa:
brojevi[0]
brojevi[1]
brojevi[2]
Prvi indeks je uvek 0.
Broj elemenata dobijamo pomoću:
brojevi.Length
Za prolazak kroz sve elemente možemo koristiti:
foreach (int broj in brojevi)
{
Console.WriteLine(broj);
}
Za rad sa nizovima možemo koristiti i gotove sistemske metode, na primer:
Array.Sort(brojevi);
Najvažnije je razumeti:
niz → više vrednosti istog tipa
indeks → određuje element
Length → broj elemenata
foreach → prolazak kroz elemente
Array.Sort() → sortiranje niza
Array.IndexOf() → pronalaženje indeksa vrednosti
18. Zadaci za vežbu i samostalan rad
Zadatak 1 - Definisati niz od 5 celih brojeva i pomoću foreach petlje ispisati sve njegove elemente.
Zadatak 2 - Definisati niz od 5 imena učenika. Pomoću foreach petlje ispisati sva imena.
Zadatak 3 - Definisati niz: int[] brojevi = { 12, 5, 8, 20, 3 }; Pomoću foreach i if ispisati samo brojeve veće od 10.
Zadatak 4 - Napraviti niz od 5 brojeva. Ispisati: prvi element, poslednji element, broj elemenata. Koristi indeks i Length.
Zadatak 5 - Napraviti niz int[] brojevi = { 50, 10, 40, 20, 30 }; Sortirati ga pomoću: Array.Sort() Nakon toga pomoću foreach ispisati sortirani niz.
Zadatak 6 – izazov - Napraviti niz od 10 celih brojeva. Pomoću foreach izračunaj koliko elemenata niza ima vrednost veću od 50. Na kraju ispisati rezultat.
Primer:
Brojeva većih od 50 ima: 4
Pitanja za proveru znanja
-
Šta je niz?
-
Kako se definiše niz celih brojeva?
-
Od kog broja počinje indeksiranje niza?
-
Šta predstavlja
brojevi[2]? -
Čemu služi
Length? -
Čemu služi
foreach? -
Koja je osnovna razlika između
foriforeachkod rada sa nizovima? -
Čemu služi
Array.Sort()? -
Čemu služi
Array.IndexOf()? -
Zašto je
foreachpogodan za prolazak kroz sve elemente niza?