190 likes | 379 Views
Programiranje I. zima 2009/10. Metodi. Ideja: složen zadatak podeliti u više jednostavnijih zadataka Dva strane svakog metoda Definisanje (pisanje) metoda Pozivanje (izvršavanje) metoda Kako organizovati program sa metodima?. Metodi. Primer: da li je rečenica palindrom? radar
E N D
Programiranje I zima 2009/10
Metodi • Ideja: složen zadatak podeliti u više jednostavnijih zadataka • Dva strane svakog metoda • Definisanje (pisanje) metoda • Pozivanje (izvršavanje) metoda • Kako organizovati program sa metodima? Programiranje I
Metodi • Primer: da li je rečenica palindrom? • radar • aroma sa mora • sir ima miris • Ana voli Milovana • E sine, ženi se! Programiranje I
Lokalne i globalne promenljive • Promenljive (polja) se mogu definisati van metoda u klasama • Oblast važenja imena: deo teksta programa u kojem se može koristiti definisano ime • Pravilo: ime (identifikator) važi u bloku u kome je definisano Programski jezici
Lokalne i globalne promenljive • Primer: publicclass IgraSaKartama { String pobednik; // globalna promenljiva (polje) ... void odigrajIgru() { String igrač; // lokalna promenljiva // Ostale naredbe metoda ... } ... } Programski jezici
Lokalne i globalne promenljive • Primer: for (int i = 0; i < n; i++) { // Telo petlje . . . } if (i == n) // GREŠKA: ovde ne važi ime i System.out.println("Završene sve iteracije"); Programski jezici
Lokalne i globalne promenljive • Primer: void neispravanMetod(int n) { int x; while (n > 0) { int x; // GREŠKA: ime x je već definisano ... } } Programski jezici
Dužina trajanja promenljivih • “Životni vek” promenljivih • Alociranje (rezervisanje) promenljive • kada se izvrši naredba definicije promenljive • Dealociranje (uklanjanje) promenljive • lokalne promenljive: kada se poziv metoda završi • parametri metoda: kada se poziv metoda završi • globalne promenljive : postoje sve vreme Programski jezici
Dužina trajanja promenljivih • Primer: publicclass Test { int x = 0; publicstaticvoid main(String[] args) { int y = 0; dodaj1(y); System.out.println(“x= ” + x + “ y= ” + y); } publicstaticvoid dodaj1(int n) { n = n + 1; x = x + 1; } } Programski jezici
Metodi • Primer: igra pogađanja broja sa ograničenjem Pogodite broj> 50 Zamislio sam manji broj Pogodite broj> 25 Zamislio sam veći broj Pogodite broj> 44 Bravo, pogodili ste broj Želite li da ponovo igrate (d/n)? n Pogodili ste jedanput Do viđenja ... Programiranje I
Rekurzivni metodi • Da li metod može da poziva sam sebe? • Da ─ rekurzivan metod • Primer: izračunavanje stepena xn, x realan broj i n ceo broj • Gotovo rešenje: Math.pow(x,n) Programiranje I
Rekurzivni metodi • Iterativno rešenje za xn : double stepen(double x, int n) { double y = 1; for (int i = 0; i < n; i++) y = y * x; return y; } Programiranje I
Rekurzivni metodi • Rekurzivno rešenje za xn : double stepen(double x, int n) { if (n == 0) return 1; else return x * stepen(x, n-1); } Programiranje I
Rekurzivni metodi • Mehanizam pozivanja rekurzivnih metoda se ne razlikuje od standardnog načina za pozivanje običnih metoda: • argumenti u pozivu metoda se dodeljuju parametrima metoda kao početne vrednosti • izvršava se telo pozvanog metoda Programiranje I
Rekurzivni metodi • Lanac rekurzivnih poziva istog metoda • Primer: stepen(1.5,3) Programiranje I
Rekurzivni metodi • Rekurzivno rešavanje problema: svođenje na sličan prostiji problem • Odogovor na pitanje: kako rešiti polazni problem ukoliko je poznato rešenje za sličan prostiji problem (ili više njih) • Rekurzivno rešenje • bazni slučaj • opšti slučaj Programiranje I
Rekurzivni metodi • Fibonačijev niz brojeva 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... • Primer: izračunavanje n-tog člana Fibonačijevog niza brojeva n=6: fib(6) → 8 n=11: fib(11) → 89 n=23: fib(23) → 28657 Programiranje I
Rekurzivni metodi • Iterativno rešenje: int fib(int n) { int x = 1, y = 1, z = 1; for (int i = 3; i <= n; i++) { z = x + y; x = y; y = z; } return z; } Programiranje I
Rekurzivni metodi • Rekurzivno rešenje: int fib(int n) { if (n <= 2) // bazni slučaj return 1; else // opšti slučaj return fib(n-1) + fib(n-2); } Programiranje I