36
$ OOP 02 $ Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021. [email protected] [~]$ _ [1/28]

Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

$ OOP 02$ Nizovi i matrice

Name: Ognjen Milinković†

Date: 8. mart 2021.

[email protected]

[~]$ _ [1/28]

Page 2: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Sadržaj

1. NizoviStruktura nizNizovi u javi - primerijava.util.Arrays

2. MatriceRealizacija matriceMatrice u javi - primeri

[~]$ _ [2/28]

Page 3: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

1. NizoviStruktura nizNizovi u javi - primerijava.util.Arrays

2. MatriceRealizacija matriceMatrice u javi - primeri

[1. Nizovi]$ _ [3/28]

Page 4: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Šta je niz?

> Struktura podataka> Omogućava slučajan pristup (eng. random access)> Susedni elementi niza se u memoriji nalaze na susednim pozicijama

[1. Nizovi]$ _ [4/28]

Page 5: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Dobre strane

> Pristup proizvoljnom elementu> Lako se kešira> Iteracija kroz strukturu je izuzetno brza (keširanje i lokalnost suseda)

[1. Nizovi]$ _ [5/28]

Page 6: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Loše strane

> Zahteva uniforman blok memorije* Nekada teško naći usled fragmentacije memorije

> Operacije dodavanja1 i brisanja su skupe1. Alokacija (potencijalno velikog) bloka memorije2. Kopiranje originalnog niza u novi blok3. Primena traženog ažuriranja

1Možemo implementirati vremenski efikasnije uz alokaciju većeg prostora

[1. Nizovi]$ _ [6/28]

Page 7: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Adresiranje

> Najčešće sintaksa za niz a za element na poziciji i izgleda:

int x = a[i]

> operator [] računa adresu elementa na poziciji i koji potom vraća> C++ omogućava da definišemo sopstveni operator indeksiranja

[1. Nizovi]$ _ [7/28]

Page 8: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Adresiranje - kako izračunati adresu?

Neka je:> iaddr - adresa i-tog elementa koji želimo> a - adresa početka niza> i - indeks elementa koji želimo (indeksiramo od 0)> T - tip elemenata koji su u nizu> sizeof - funkcija ili operator koji nam vraća veličinu tipa T u bajtovima

Onda slučajni pristup elementu dobijamo računanjem po formuli:> iaddr = a + i*sizeof(T)

[1. Nizovi]$ _ [8/28]

Page 9: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pravljenje niza

U javi postoje dva načina da se napravi niz dužine n1. int[] a = new int[n]2. int a[] = new int[n]

[1. Nizovi]$ _ [9/28]

Page 10: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Inicijalizacija niza

> Niz možemo inicijalizovati na sledeći način:

int[] a = {10, 20, 42, 99};

[1. Nizovi]$ _ [10/28]

Page 11: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Podrazumevana vrednost - Java standard

Java standard kaže:> Each class variable, instance variable, or array component is initializedwith a default value when it is created (§15.9, §15.10).

> For type int, the default value is zero, that is, 0.Više o temi na adresi:> docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5

[1. Nizovi]$ _ [11/28]

Page 12: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Primer 1

public static void main(String[] args) {int[] a = new int[4];a[0] = 10;a[1] = 20;a[2] = 42;a[3] = 99;System.out.println("Duzina niza: " + a.length);

}

[1. Nizovi]$ _ [12/28]

Page 13: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Primer 2

public static void main(String[] args) {int[] a = {10, 20, 42, 99};System.out.println("Duzina niza: " + a.length);

}

[1. Nizovi]$ _ [13/28]

Page 14: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Ispis niza - for

> Možemo koristiti standardnu for petlju> Dužinu niza dobijamo sa a.length

public static void main(String[] args) {int[] a = {10, 20, 42, 99};

for (int i = 0; i < a.length; i++)System.out.print(a[i] + " ");

System.out.println();}

[1. Nizovi]$ _ [14/28]

Page 15: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Ispis niza - foreach

> Java poseduje i foreach petlju (JDK 1.5)> Koristi ključnu reč for> Oslobađa nas indeksiranja i brige o dužini strukture> Indeksirajuće for petlje se retko koriste u praksi

public static void main(String[] args) {int[] a = {10, 20, 42, 99};

for (int element: a)System.out.print(element + " ");

System.out.println();}

[1. Nizovi]$ _ [15/28]

Page 16: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Prenos niza funkciji

static double sumiraj(double[] a) {double sum = 0;for (int i = 0; i < a.length; i++)

sum += a[i];// for (double element: a)// sum += element;return sum;

}

public static void main(String[] args) {double[] a = {10.1, 23.5, 42.42, 99};System.out.println("Suma: " + sumiraj(a));

}

[1. Nizovi]$ _ [16/28]

Page 17: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Vraćanje niza iz funkcije

static int[] obrni(int[] a) {int[] tmp = new tmp[a.length];

for (int i = 0; i < a.length; i++)tmp[i] = a[a.length-1-i];

return tmp;}

public static void main(String[] args) {int[] a = {10, 20, 42, 99};

int[] b = obrni(a);for (int e: a)

System.out.print(e + " ");

System.out.println();}

[1. Nizovi]$ _ [17/28]

Page 18: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ java.util.Arrays

> Sadrži veliki broj statičkih funkcija za rad sa nizovima> Funkcije za sortiranje, pretragu, poređenje...> Pogledati okačene primere

public static void main(String[] args) {int[] a = {3, 1, 4, 1, 5, 9, 2, 6, 5};Arrays.sort(a);for (int e: a)

System.out.print(e + " ");System.out.println();

}

[1. Nizovi]$ _ [18/28]

Page 19: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pročitati

> www.tutorialspoint.com/java/java_arrays.htm> www.tutorialspoint.com/java/util/java_util_arrays.htm

[1. Nizovi]$ _ [19/28]

Page 20: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

1. NizoviStruktura nizNizovi u javi - primerijava.util.Arrays

2. MatriceRealizacija matriceMatrice u javi - primeri

[2. Matrice]$ _ [20/28]

Page 21: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Matrix

[2. Matrice]$ _ [21/28]

Page 22: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Matrice

> Realizujemo kao niz nizova2

2Da li vidimo neku pravilnost u brojevima?

[2. Matrice]$ _ [22/28]

Page 23: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Matrice

> Možemo praviti zabavne konstrukcije - npr. testerasti niz (eng. jaggedarray)

[2. Matrice]$ _ [23/28]

Page 24: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pitanja

U primeru sa prethodnog slajda:> Šta označava a[0]?

> // Niz dužine 3> Šta označava a[0][2]?> // int vrednosti 4> Šta označava a.length?> // broj vrsti matrice a koji je jednak 3> Šta označava a[2].length?> // broj kolona u vrsti 2 matrice a koji je jednak 2

[2. Matrice]$ _ [24/28]

Page 25: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pitanja

U primeru sa prethodnog slajda:> Šta označava a[0]?> // Niz dužine 3

> Šta označava a[0][2]?> // int vrednosti 4> Šta označava a.length?> // broj vrsti matrice a koji je jednak 3> Šta označava a[2].length?> // broj kolona u vrsti 2 matrice a koji je jednak 2

[2. Matrice]$ _ [24/28]

Page 26: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pitanja

U primeru sa prethodnog slajda:> Šta označava a[0]?> // Niz dužine 3> Šta označava a[0][2]?

> // int vrednosti 4> Šta označava a.length?> // broj vrsti matrice a koji je jednak 3> Šta označava a[2].length?> // broj kolona u vrsti 2 matrice a koji je jednak 2

[2. Matrice]$ _ [24/28]

Page 27: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pitanja

U primeru sa prethodnog slajda:> Šta označava a[0]?> // Niz dužine 3> Šta označava a[0][2]?> // int vrednosti 4

> Šta označava a.length?> // broj vrsti matrice a koji je jednak 3> Šta označava a[2].length?> // broj kolona u vrsti 2 matrice a koji je jednak 2

[2. Matrice]$ _ [24/28]

Page 28: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pitanja

U primeru sa prethodnog slajda:> Šta označava a[0]?> // Niz dužine 3> Šta označava a[0][2]?> // int vrednosti 4> Šta označava a.length?

> // broj vrsti matrice a koji je jednak 3> Šta označava a[2].length?> // broj kolona u vrsti 2 matrice a koji je jednak 2

[2. Matrice]$ _ [24/28]

Page 29: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pitanja

U primeru sa prethodnog slajda:> Šta označava a[0]?> // Niz dužine 3> Šta označava a[0][2]?> // int vrednosti 4> Šta označava a.length?> // broj vrsti matrice a koji je jednak 3

> Šta označava a[2].length?> // broj kolona u vrsti 2 matrice a koji je jednak 2

[2. Matrice]$ _ [24/28]

Page 30: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pitanja

U primeru sa prethodnog slajda:> Šta označava a[0]?> // Niz dužine 3> Šta označava a[0][2]?> // int vrednosti 4> Šta označava a.length?> // broj vrsti matrice a koji je jednak 3> Šta označava a[2].length?

> // broj kolona u vrsti 2 matrice a koji je jednak 2

[2. Matrice]$ _ [24/28]

Page 31: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pitanja

U primeru sa prethodnog slajda:> Šta označava a[0]?> // Niz dužine 3> Šta označava a[0][2]?> // int vrednosti 4> Šta označava a.length?> // broj vrsti matrice a koji je jednak 3> Šta označava a[2].length?> // broj kolona u vrsti 2 matrice a koji je jednak 2

[2. Matrice]$ _ [24/28]

Page 32: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pravljenje matrice v1

public static void main(String[] args) {int[][] a = new int[3][3];a[0][0] = 3; a[0][1] = 1; a[0][2] = 4;a[1][0] = 1; a[1][1] = 5; a[1][2] = 9;a[2][0] = 2; a[2][1] = 6; a[2][2] = 5;

for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++)

System.out.print(a[i][j] + " ");System.out.println();

}}

[2. Matrice]$ _ [25/28]

Page 33: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Pravljenje matrice v2

public static void main(String[] args) {int[][] a = {

{3, 1, 4},{1, 5, 9},{2, 6, 5}

};

for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++)

System.out.print(a[i][j] + " ");System.out.println();

}}

[2. Matrice]$ _ [26/28]

Page 34: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Prenos u funkciju

static void ispisi(int[][] a) {for (int i = 0; i < a.length; i++) {

for (int j = 0; j < a[i].length; j++)System.out.print(a[i][j] + " ");

System.out.println();}

}public static void main(String[] args) {

int[][] a = { {3, 1, 4}, {1, 5, 9}, {2, 6, 5} };ispisi(a);

}

[2. Matrice]$ _ [27/28]

Page 35: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

§ Vraćanje iz funkcije

static int[][] generisi() {int[][] tmp = { {3, 1, 4}, {1, 5, 9}, {2, 6, 5} };return tmp;

}

public static void main(String[] args) {int[][] a = generisi();ispisi(a); // sa prethodnog slajda

}

[2. Matrice]$ _ [28/28]

Page 36: Nizovi i matrice Name: Ognjen Milinković Date: 8. mart 2021

ZahvalnicaOvu prezentaciju je napravio kolega Nemanja Mićović.

Hvala kolegi Mićoviću što se saglasio da koristimo ovu prezentaciju.

[2. Matrice]$ _ [29/28]