KONTROLA TOKA
(Upravljačke strukture)
U Javi se koriste sledeće upravljacke strukture :
- naredbe izbora (selekcije):
if-else
iswitch
- naredbe iteracije (petlje)
for, while, do while
- naredba za obradu izuzetaka
try/catch/finally
GRANANJA - naredbe izbora (selekcije)
Kontrola toka omogućava donošenje odluka (izbor) u programima. Potrebno je izabrati, na primer "Ako je na semaforu zeleno svetlo prolazim kroz raskrsnicu, ako je crveno - čekam". Programerski rečeno pravi se poređenje između promenljivih, konstanti i vrednosti izraza, a onda se izvršava jedna ili druga grupa izraza u zavisnosti od rezultata datog poređenja.
if-else
if-else
konstrukcija omogućava izvršenje određenog bloka instrukcija ako je uslov konstrukcije ispunjen. Opšti oblik je:
if (boolean_izraz) blok1;
[else blok2;]
gde je else
klauzula opciona (i ako postoji, blok2 se izvršava ako uslov nije ispunjen) a boolean_izraz je uslov koji može biti bilo koji izraz koji vraća vrednost tipa boolean. blok1 i blok2 su proizvoljni blokovi instrukcija, koji mogu da budu i samo jedna instrukcija.
int a = 33;
short b = 28;
boolean d=a>b;
int min,max;
if (a<b) min=a;
else min=b;
if (d) max=a;
else max=b;
System.out.println( " d = " + d);
System.out.println( " min = " + min);
System.out.println( " max = " + max);
Na izlazu se dobija:
d = true
min = 28
max = 33
Umesto inicijalizacija a i b mogli smo ih uneti sa tastature:
int a=ulaz.nextInt();
short b=ulaz.nextShort();
Svaki od blokova, bilo u if
ili u else
delu može biti nova if-else
konstrukcija. else
pripada najbližem if
koji mu prethodi koje nije u izdvojenom bloku i nije već rezervisano od strane nekog drugog else
.
int a = 54;
if (a % 2 == 0)
if (a<50) //paran broj manji od 50
System.out.println( "\nprvi print");
else //paran broj > od 50 ili neparan broj???
System.out.println( "\ndrugi print");
a = 23;
if (a % 2 == 0)
if (a<50) //paran broj manji od 50
System.out.println( "\ntreći print");
else //paran broj > od 50 ili neparan broj???
System.out.println( "\nčetvrti print");
Na izlazu se dobija:
drugi print
Nazad na početak: 04. Naredbe izbora - grananje
switch
Naziva se još i iskaz izbora. Opšti oblik switch
naredbe je:
switch (izraz) {
case vr1: blok1; [break];
...
case vrN: blokN; [break];
[default: blok_def]
}
Pri tome izraz mora biti bilo kog prostog tipa, a vrednosti specificirane u case
klauzulama (vr1, vr2, ... , vrN)
moraju biti kompatibilnog tipa i ne smeju se duplirati. Svi navedeni blokovi instrukcija kao i break
klauzule su opcioni.
Na početku switch-a se izračunava vrednost izraza izraz i dobijena vrednost se poredi sa vrednostima vr1, vr2 ... vrN. Tamo gde dodje do uparivanja izvršava se blok instrukcija u odgovarajućem case-u. break dovodi do skoka na kraj tekućeg bloka što u ovom slučaju znači na kraj switch konstrukcije. Ukoliko se vrednost izraza izraz ne nalazi medju vrednostima vr1,..., vrN tada se izvršava blok naredbi blok_def;
Treba napomenuti da ukoliko se izostavi neka od break klauzula dolazi do propagiranja kontrole u sledeći case.
Primer:
switch(mesec) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: broj_dana=31; break;
case 4:
case 6:
case 9:
case 11: broj_dana=30; break;
case 2: broj_dana=28;
default: System.out.print("greška");
}
ili
switch(mesec) {
case 4:
case 6:
case 9:
case 11: broj_dana=30; break;
case 2: broj_dana=28;break;
default: broj_dana=31;
}
Ovde se switch
konstrukcija koristi za određivanje broja dana u mesecu na osnovu rednog broja meseca (ne vodeći računa o prestupnim godinama). Moguće je skratiti pisanje tako što će se za mesece sa 31 danom broj dana određivati u default
klauzuli (drugi primer), u tom slučaju moramo biti sigurni da promenljiva mesec sigurno ima vrednosti između 1 i 12.
Nazad na početak: 04. Naredbe izbora - grananje
Vežbe
Z4.1. Najveći broj
Odrediti i ispisati najveći (max) od unetih:
a) dva,
b) tri,
c) pet
brojeva.
Pod a) može ovako:
Scanner ul=new Scanner(System.in);
int a, b, max;
System.out.print("Unesi brojeve a i b :");
a=ul.nextInt(); b=ul.nextInt();
if (a>b) max=a;
else max=b;
System.out.print("Veći od "+a+" i "+b+" je "+max);
Pod b) još uvek može ovako:
int a, b, c, max;
System.out.print("Unesi brojeve a, b i c :");
a=ul.nextInt(); b=ul.nextInt(); c=ul.nextInt();
if (a>b) if (a>c) max=a;
else max=c;
else if (b>c) max=b;
else max=c;
System.out.print("Veći od "+a+", "+b+", "+c+" je "+max);
Dalje ne može, koristimo pretpostavku da je prvi broj najveći i max
upoređujemo ga redom sa ostalim brojevima:
Z4.2. Proizvod pozitivnih
Izračunati i prikazati proizvod pozitivnih od unetih pet brojeva.
Scanner ul=new Scanner(System.in);
int a, b, c, d, e, P=1;
System.out.print("Unesi brojeve a, b, c, d i e :");
a=ul.nextInt(); b=ul.nextInt(); c=ul.nextInt(); d=ul.nextInt(); e=ul.nextInt();
if (a>0) P*=a;
if (b>0) P*=b;
if (c>0) P*=c;
if (d>0) P*=d;
if (e>0) P*=e;
System.out.print("Proizvod pozitivnih je "+P);
Nazad na početak: 04. Naredbe izbora - grananje
Z4.3. Brojanje
Koliko je od unetih 6 brojeva :
a) negativno
b) neparno
c) deljivo sa 7
Scanner ul=new Scanner(System.in);
int a, b, c, d, e, f, brNeg=0, brNep=0, brDelj7=0;
System.out.print("Unesi brojeve a, b, c, d, e i f :");
a=ul.nextInt(); b=ul.nextInt(); c=ul.nextInt(); d=ul.nextInt(); e=ul.nextInt(); f=ul.nextInt();
//broj negativnih
if (a<0) brNeg++;
if (b<0) brNeg++;
if (c<0) brNeg++;
if (d<0) brNeg++;
if (e<0) brNeg++;
if (f<0) brNeg++;
System.out.print("Broj negativnih je "+brNeg);
//broj neparnih
if (a%2==1) brNep++;
........
//broj deljivih sa 7
if (a%7==0) brDelj7++;
.....
Z4.4. Ocene 2
Ispisati ocenu koju je učenik dobio na osnovu broja bodova koji se unose. 0-27=1, 28-46=2, 47-65=3, 66-83=4, 84-100=5.
Z4.5. Idealna težina
Ako se idealna težina za muškarce računa po formuli Visina - 100, a za žene Visina-110. Dozvoliti toleranciju od 5%. Na osnovu unete visine i težine ispisati: "Idealna težina", "Imate viška / manjka kilograma".
Nazad na početak: 04. Naredbe izbora - grananje
Z4.6. Uređenost brojeva
Za unete brojeve proveriti da li su uređeni u opadajući.
Z4.7. Redni broj dana u godini
Uneti su redni broj meseca mes i dana u mesecu (datum) dan. Odrediti redni broj dana u godini. Pretpostavlja se da je godina prosta.
Scanner ul=new Scanner(System.in);
int dan, mes, brDanaUgod;
System.out.print("Unesi datum u obliku broj dana u mesecu i broj meseca u godini");
dan=ul.nextInt(); mes=ul.nextInt();
brDanaUgod=dan;
switch(mes) {
case 12: brDanaUgod+=30;//dodajemo broj dana iz prethodnog meseca
case 11: brDanaUgod+=31;
case 10: brDanaUgod+=30;
case 9: brDanaUgod+=31;
case 8: brDanaUgod+=31;
case 7: brDanaUgod+=30;
case 6: brDanaUgod+=31;
case 5: brDanaUgod+=30;
case 4: brDanaUgod+=31;
case 3: brDanaUgod+=28;
case 2: brDanaUgod+=31;
}
System.out.print("Redni broj dana "+dan+"."+mes+". u godini je "+brDanaUgod);
Z4.8. Broj dana između dva datuma
a) iste godine,
b) različitih godina.
Nazad na početak: 04. Naredbe izbora - grananje
Z4.9. Kvadrat u krug ili obratno.
Dati su krug preko poluprečnika i kvadrat preko stranice. Odrediti da li:
a) kvadrat može da stane u krug
b) krug može da stane u kvadrat
Z4.11. Kvadrant u kome se nalazi tačka.
Ispisati broj kvadranta u kome se nalazi tačka zadata pomoću koordinata. Ako se tačka nalazi na osama ispisati "0".
Z4.11. Duž seče ose
Da li duž zadata krajnjim tačkama seče x (ili y) osu.
Scanner ul=new Scanner(System.in);
int Ax, Ay, Bx, By;
System.out.print("Unesi koordinate krajnjih tacaka duzi Ax, Ay, Bx, By: ");
Ax=ul.nextInt(); Ay=ul.nextInt(); Bx=ul.nextInt(); By=ul.nextInt();
//da li sece x - proveravamo y koordinate, da li su sa suprotne strane
if(Ay*By<0) System.out.println("Duz sece x osu."); //koordinate su suprotnih znakova
else System.out.println("Duz ne sece x osu.");
//da li sece y
if(Ax*Bx<0) System.out.print("Duz sece y osu.");
else System.out.print("Duz ne sece y osu.");
Nazad na početak: 04. Naredbe izbora - grananje
Z4.12. Tačka u krugu
Da li se tačka A zadata pomoću koordinata Ax i Ay nalazi u krugu K zadatom pomoću koordinata centra Ox, Oy i poluprečnika r.
Z4.13. Duž u krugu
Da li se duž zadata pomoću krajnjih tačaka A i B nalazi cela u krugu K.
Z4.14. Krug seče osu
Da li krug k seče x (ili y) osu?
Nazad na početak: 04. Naredbe izbora - grananje
Z4.15.
(nastavak Z2.7.) Pravougaonik ima stranice koje su paralelne koordinatnim osama. Zadat je temenima A, C. Da li je:
a) Tačka E u pravougaoniku?
b) Tačka E u opisanom krugu?
c) Tačka E između pravougaonika i opisanog kruga?
Z4.16.Odnos dva kruga K1 i K2.
Da li se seku, dodiruju (spolja, iznutra), K1 je unutar K2.
Z4.17. Ceo krug K u pravougaoniku
a) Odrediti da li se ceo krug K nalazi u pravougaoniku
b) Da li se deo kruga K nalazi u pravougaoniku, odn. da li se seku
Nazad na početak: 04. Naredbe izbora - grananje
Z4.18.
Redovi i kolone na šahovskoj tabli označeni su brojevima od 1 do 8. Svako polje je označeno uređenim parom (A,B). Za dva uneta polja (A,B) i (C,D) odrediti da li :
a) su iste boje,
b) kraljica sa polja (A,B) tuče polje (C,D)
c) skakač sa polja (A,B) tuče polje (C,D)
a) Polja jedne boje su (1,1), (1,3), (1,5), (1,7), (2,2), (2,4)... Sledi, A+B je paran broj. Sledi, polja su iste boje ako je (A+B)%2==(C+D)%2
b) Kraljica sa polja (A,B) tuče:
- po horizontali sva polja (A,x), sledi A==C,
- po vertikali sva polja (x,B), sledi B==D,
- po rastućoj dijagonali sva polja A+B==C+D,
- po opadajućoj dijagonali sva polja A-B==C-D,
c) Skakač sa polja (A,B) tuče okolna polja koja su podjednako udaljena na rastojanju 2 polja po horizontali i 1 po vertikali ili obratno, tj polja koja se nalaze na kružnici na rastojanju (A-C)^2+(B-D)^2==5
Scanner ul=new Scanner(System.in);
int A, B, C, D;
System.out.print("Unesi A, B, C i D :");
A=ul.nextInt(); B=ul.nextInt(); C=ul.nextInt(); D=ul.nextInt();
//a)
if((A+B)%2==(C+D)%2) System.out.println("Polja su iste boje.");
else System.out.println("Polja nisu iste boje.");
//b
if(A==C || B==D || A+B==C+D || A-B==C-D) System.out.println("Kraljica na polju ("+A+","+B+") tuče polje ("+C+","+D+").");
else System.out.println("Kraljica na polju ("+A+","+B+") ne tuče polje ("+C+","+D+").");
//c
if(Math.pow(A-C, 2)+Math.pow(B-D, 2)==5) System.out.println("Skakač na polju ("+A+","+B+") tuče polje ("+C+","+D+").");
else System.out.println("Skakač na polju ("+A+","+B+") ne tuče polje ("+C+","+D+").");
Z4.19. Koji je datum sutra
Nazad na početak: 04. Naredbe izbora - grananje
b) Da li se deo kruga K nalazi u pravougaoniku, odn. da li se seku