KONTROLA TOKA
(Upravljačke strukture)

U Javi se koriste sledeće upravljacke strukture :

  • naredbe izbora (selekcije): if-else i switch
  • 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

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

 

Sve cene se za kupce iz Srbije obračunavaju u dinarima po srednjem kursu Narodne banke Srbije na dan izdavanja predračuna. PDV se dodatno obračunava. Gloria Ferrari doo maksimalno koristi sve svoje resurse da Vam svi artikli na sajtu budu prikazani sa ispravnim nazivima, opisima, fotografijama i cenama, ali nažalost ne možemo garantovati da su svi podaci na sajtu u potpunosti ispravni. Svi artikli prikazani na ovom sajtu su deo naše ponude i ne podrazumeva se da su svi dostupni u svakom trenutku na našem lageru. Tačne podatke sa rokovima isporuke dobijate u predračunu. Zadržavamo pravo promene cena svih proizvoda i usluga, bez prethodne najave na sajtu.