Univerzitet u Nišu Građevinsko-arhitektonski fakultet Informatika2 4. Ciklična algoritamska struktura 5. Jednodimenzionalno polje Milica Ćirić
Ciklična algoritamska struktura Ciklična struktura (petlja) omogućava da se algoritamski koraci ponavljaju više puta. Svaka petlja mora imati mogućnost za izlazak iz petlje. U zavisnosti od toga kada se izlazi iz petlje, petlje se mogu podeliti na brojčke petlje iz petlje se izlazi nakon zadatog broja ponavljanja izvršenja, tj. kada brojač dostigne zadatu vrednost iterativne petlje kod ovih petlji nije unapred definisan broj ponavljanja i izlazi se kada bude ispunjen zadati uslov, pri čemu je to obično postizanje zadate tačnosti pri računanju, ili dobijanje zadate vrednosti u proračunu 2
Brojačka petlja for petlja i=k 1, k 2, k 3 telo petlje for (inicijalizacija; uslov; iteracija) telo petlje for (i=k 1 ; i<=k 2 ; i=i+k 3 ) telo petlje k k 1 broj prolaza n= 2 + 1 k3 3
Iterativnepetlje while petlja do-while petlja uslov da ne while (uslov) telo petlje telo petlje do telo petlje telo petlje da uslov ne while (uslov); I kod while ikod do-while petlje, telo petlje se izvršava sve dok je ispunjen uslov, a glavna razlika je u tome što se telo do-while petlje uvek izvrši bar jednom 4
Pravila Kod formiranja svih vrsti petlji važe sledeća pravila: Ako petlja počne unutar ifili elsebloka if naredbe bloka, u tom bloku se mora i završiti! Dozvoljene su paralelne (ugnježdjene) petlje. Nisu dozvoljene petlje koje se seku! paralelne petlje petlje koje se seku 5
Primer Izračunati sumu svih neparnih brojeva od 1 do N (N je prirodni broj) pomoću for petlje while petlje do-while petlje 6
Rešenje pomoću for petlje P N S=0 i=1,n, 2 S=S+i S K 7
Rešenje pomoću for petlje package vezbe; import java.io.*; public class PrimerFor public static void main(string[] args) throws Exception int N, i, S; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite vrednost za N: "); N = Integer.parseInt(ulaz.readLine()); S = 0; /* for petlja za koju je definisano da je brojac promenljiva i * sa pocetnom vrednoscu 1 i krajnjom vrednoscu N * pri cemu se u svakom prolasku vrednost i povecava za 2 */ for (i = 1; i <= N; i = i+2) S = S + i; System.out.println("Vrednost sume neparnih brojeva od 1 do " + N + " je " + S); 8
Rešenje pomoću while petlje P N S=0 i=1 i<=n NE DA S=S+i i=i+2 S K 9
Rešenje pomoću while petlje package vezbe; import java.io.*; public class PrimerWhile public static void main(string[] args) throws Exception int N, i, S; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite vrednost za N: "); N = Integer.parseInt(ulaz.readLine()); S = 0; i = 1; /* telo petlje se izvrsava dokle god je ispunjen uslov da je i manje ili jednako N*/ while (i <= N) S = S + i; i= i + 2; System.out.println("Vrednost sume neparnih brojeva od 1 do " + N + " je " + S); 10
Rešenje pomoću do-while petlje P N S=0 i=1 S=S+i i=i+2 DA i<=n S NE K 11
Rešenje pomoću do-while petlje package vezbe; import java.io.*; public class PrimerDoWhile public static void main(string[] args) throws Exception int N, i, S; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite vrednost za N: "); N = Integer.parseInt(ulaz.readLine()); S = 0; i = 1; /* telo petlje se izvrsava bar jednom i zatim sve dokle je ispunjen uslov da je i manje ili jednako N*/ do while (i <= N); S = S + i; i= i + 2; System.out.println("Vrednost sume neparnih brojeva od 1 do " + N + " je " + S); 12
Jednodimenzionalno polje Polje kao tip podataka predstavlja kolekciju elemenata (vrednosti) pri čemu se svakom od elemenata može pristupiti navođenjem jednog ili više indeksa. Broj indeksa potreban za pristup jednom elementu polja jednak je broju dimenzija polja. Jednodimenzionalno polje je niz elemenata sa poznatim redosledom i svakom elementu se pristupa navođenjem jednog indeksa. Indeks je određen pozicijom elementa u nizu. Ako niz ima N elemenata, prvi element ima indeks 0, a poslednji N-1. 13
Deklaracija niza i kreiranje promenljive Promenljiva koja je jednodimenzionalno polje se deklariše navodjenjem tipa, imena i četvrtastih zagrada: tip_promenljive[ ] ime_promenljive; ili tip_promenljive ime_promenljive[ ]; Promenljivase kreiraili prilikomdeklaracije, navođenjem svih elemenata niza int [ ] niz = 1, 4, 7, 8; ili korišćenjem ključne reči new i zadavanjem broja elemenata u obliku konstante ili promenljive niz = new int[10]; niz = new int[n]; /* N je promenljiva kojoj smo dodelili neku vrednost */ 14
Pristup elementimaniza Elementima nizase pristupanavođenjemimena niza i indeksa između zagrada. Indeks može biti zadat kao konstanta, promenljiva ili izraz prvi_niz[0] //pristupamo prvom elementu niza, čiji indeks je 0 prvi_niz[5] //pristupamo šestom elementu niza drugi_niz[i] /* pristupamo elementu niza čiji je indeks i, gde je i promenljiva kojoj smo prethodno dodelili vrednost */ treci_niz[a+b%3] /* pristupamo elementu čiji je indeks vrednost izraza a+b%3, gde su a i b promenljive kojima smo prethodno dodelili vrednost */ 15
Primer Naći maksimalni element niza. P N, a max=a[0] i=1,n-1 a[i]>max DA NE max=a[i] max K 16
Primer - Kod package vezbe; import java.io.*; public class PrimerNiz public static void main(string[] args) throws Exception int N; double a [], max; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite broj elemenata niza: "); N = Integer.parseInt(ulaz.readLine()); /* kreiramo niz tek nakon sto ucitamo broj elemenata niza */ a = new double[n]; /* zatim ucitavamo svaki od elemenata, * pocetna vrednost indeksa je 0, a kranja N-1*/ for (int i=0; i<n; i++) System.out.print("Unesite sledeci elemenat niza: "); a[i] = Double.parseDouble(ulaz.readLine()); 17
Primer Kod(nastavak) /* dodeljujemo promenljivoj max vrednost prvog elementa */ max = a[0]; /* za svaki od preostalih elemenata niza (pocev od drugog), * proveravamo da li je veci od trenutnog maksimuma * i ako jeste postavljamo ga kao novu vrednost maksimuma */ for (int i=1; i<n; i++) if (a[i]>max) max = a[i]; System.out.println("Najveci elemenat unetog niza je: " + max); 18
Zadaci 1. Izračunati vrednost sume Sza date vrednosti x i tačnost ε. Sumiranje prekinuti kada je poslednja dodata vrednost po apsolutnoj vrednosti ε. 2. Izračunati i odštampati vrednost funkcije f(x)=x 3-23x 2 +62x-40 primenom iterativnog postupka Izračunavanje prekinuti kada je x i+1 -x i ε, gde je εzadata tačnost. 19
Zadaci 3. Izračunatiiodštampati vrednostis i P. Na ulazu učitati vrednosti n, x i (i=1,2,,n). 20
Zadaci 4. Izračunativrednostverižnograzlomka. Na ulazu učitati vrednost za a i niz X=x i n. 21
Zadatak1 Do-while P x,eps S=0 k=0 DA S=S+el k=k+1 el >eps S NE K 22
Zadatak1 While P x,eps S=0 k=0 el= eps +1 el >eps DA NE S=S+el k=k+1 S K 23
Zadatak1 Do-while petlja package vezbe; import java.io.*; public class Cas4Zad1 public static void main(string[] args) throws Exception double x, eps, S, el; int k; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite x: "); x = Double.parseDouble(ulaz.readLine()); System.out.print("Unesite tacnost: "); eps = Double.parseDouble(ulaz.readLine()); S = 0; k=0; do el = (Math.sin(x)+Math.cos(x))/(Math.pow(k,2)+1); S = S + el; k++; while (Math.abs(el)>eps); System.out.println("Izracunata vrednost sume je: "+ S); 24
Zadatak1 While petlja package vezbe; import java.io.*; public class Cas4Zad1 public static void main(string[] args) throws Exception double x, eps, S, el; int k; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite x: "); x = Double.parseDouble(ulaz.readLine()); System.out.print("Unesite tacnost: "); eps = Double.parseDouble(ulaz.readLine()); S = 0; k=0; el = Math.abs(eps)+1; while (Math.abs(el)>eps) el = (Math.sin(x)+Math.cos(x))/(Math.pow(k,2)+1); S = S + el; k++; System.out.println("Izracunata vrednost sume je: "+ S); 25
Zadatak2 Algoritam P eps x i =23 x i+1 =23 x i =x i+1 DA x i+1 -x i >eps NE f=x i+1 f K 26
Zadatak2 package vezbe; import java.io.*; public class Cas4Zad2 public static void main(string[] args) throws Exception double eps, f, xi, xi1; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite tacnost: "); eps = Double.parseDouble(ulaz.readLine()); xi=xi1=23; do xi=xi1; xi1 = 40/Math.pow(xi,2) - 62/xi + 23; while (Math.abs(xi1-xi)>eps); f=xi1; System.out.println("Izracunata vrednost funkcije je f(x)="+ f); 27
Zadatak3 Algoritam P N, x S1=0 S2=0 P=1 i=0,n-1 S1 = S1 + x i 2 S2 = S2 + x i P = P * x i S,P K 28
Zadatak3 package vezbe; import java.io.*; public class Cas4Zad3 public static void main(string[] args) throws Exception int N, i; double x[], S, S1, S2, P; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite broj elemenata niza: "); N = Integer.parseInt(ulaz.readLine()); x = new double[n]; for (i=0; i<n; i++) System.out.print("Unesite sledeci elemenat niza: "); x[i] = Double.parseDouble(ulaz.readLine()); S1=S2=0; P=1; for (i=0; i<n; i++) S1 = S1 + Math.pow(x[i], 2); S2 += x[i]; P = P * x[i]; //moze i P *= x[i]; S = Math.sqrt(1.0/N*S1- Math.pow(1.0/N*S2, 2)); P = Math.pow(P, 1.0/N); System.out.println("Izracunate vrednosti su S=" + S + " i P=" + P); 29
Zadatak4 Algoritam P a, N, x i=n-1,1,-1 f K 30
Zadatak4 package vezbe; import java.io.*; public class Cas4Zad4 public static void main(string[] args) throws Exception int n, i; double x[], a, f; BufferedReader ulaz = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Unesite vrednost a: "); a = Double.parseDouble(ulaz.readLine()); System.out.print("Unesite broj elemenata niza: "); n = Integer.parseInt(ulaz.readLine()); x = new double[n]; for (i=0; i<n; i++) System.out.print("Unesite sledeci elemenat niza: "); x[i] = Double.parseDouble(ulaz.readLine()); f = n*math.sqrt(a); for (i=n-1; i>0; i--) f = i*math.sqrt(a) + (x[i-1]-x[i])/f; System.out.println("Izracunata vrednost veriznog razlomka je " + f); 31