Uvod u programiranje

Maja Čić


Blokovi, petlje, grananja

Sposobnost računala da obavlja složene zadatke zasniva se na svega nekoliko načina kombiniranja jednostavnih naredbi u upravljačke strukture. U Javi postoji šest takvih struktura: blok, while petlja, do ..while petlja, for petlja, if izraz i switch izraz. Svaka od ovih struktura smatra se jednim "izrazom", iako se zapravo radi o strukturiranom izrazu koji u sebi može sadržavati jednu ili više drugih naredbi.




Blok je najjednostavnija vrsta strukturiranog izraza. Namjena mu je da jednostavno okupi niz naredbi zatvorenih vitičastim zagradama u jednu naredbu. Način zapisivanja bloka je:

       {
           izrazi
       }

Blokovi naredbi se najčešće javljaju unutar drugih izjava gdje služe okupljanju više naredbi u jednu cjelinu. Zapravo, blok se može koristiti bilo gdje gdje se može javiti izraz. A već smo vidjeli da je njegovo korištenje nužno kod podprograma main. Po definiciji, podprogram je jedan blok.

Dva primjera blokova:

       {  // Ovaj blok ispisuje vrijednost varijable odg
           System.out.print("Odgovor je ");
           System.out.println(odg);
       }

       {  // Ovaj blok zamjenjuje vrijednosti varijabli x i y
           int temp;	// deklariranje privremene varijable koja se koristi samo u ovom bloku
           temp = x;	// Sačuvaj kopiju vrijednosti varijable x u temp
           x = y;	// Kopiraj vrijednost varijable y u x
           y = temp;	// Kopiraj vrijednost varijable temp u y
       }

Uočite u drugom primjeru: varijabla temp je deklarirana unutar bloka, te je nevidljiva i nedostupna izvan bloka. Takva varijabla naziva se lokalna varijabla. Doseg (scope) nekog identifikatora je dio programa u kojem se taj identifikator može koristiti. Doseg varijable definirane unutar bloka je ograničen na taj blok, točnije na dio bloka nakon deklaracije varijable.

Nije dozvoljeno više deklaracija s istim imenom u istom dosegu.



Sam blok ne utječe na tok izvršavanja programa. Preostalih pet navedenih struktura koje za razliku od bloka utječu na tok izvršavanja programa mogu se podijeliti u dvije skupine: petlje i grananja.

While petlja se koristi za uzastopno ponavljanje jednog izraza. Točnije, while petlja ponavlja izjavu dok je zadani uvjet istinit. While petlja ima oblik:

        while (logički izraz)
            izraz

Budući da izraz može biti, a najčešće i je, blok, uobičajene su while petlje oblika:

        while (logički izraz) {
            izrazi
        }

Kad računalo dođe do while izjave, procjenjuje logički izraz koji vraća vrijednost true ili false. Ako je vrijednost izraza false, računalo preskače ostatak while petlje i nastavlja s izvršenjem programa. Ako je vrijednost true, računalo izvršava izraze unutar petlje, zatim se vraća na početak petlje i ponavlja postupak, tj. ponovo procjenjuje logički izraz, te završava petlju ako je vrijednost false, a nastavlja ako je vrijednost true. Ovo se nastavlja dok izraz ne poprimi vrijednost false; slučaj u kojem se to nikad ne dogodi naziva se beskonačna petlja.

Evo primjera petlje koja ispisuje brojeve 1,2,3,4 i 5:

        int broj = 1;
        while ( broj < 6 ) {
            System.out.println(broj);
            broj = broj + 1;
        }
        System.out.println("Gotovo!");

Uočite da je vrijednost varijable broj na kraju izvođenja petlje 6, ali je posljednja ispisana vrijednost 5.



Do-while petlja je namijenjena slučajevima kada je potrebno da se uvjet ponavljanja testira na kraju petlje umjesto na početku. Do-while petlja je zapravo while petlja s uvjetom ponavljanja postavljenim na kraju petlje. Riječ do se koristi za označavanje početka petlje. Dakle, do-while petlja ima oblik:

          do
              izraz
          while ( logički izraz );

ili s korištenjem blokova:

          do {
              izrazi
          } while (logički izraz);

';' na kraju se ne smije izostaviti jer je to dio izraza. Izostavljanje bi prouzročilo sintaksnu grešku. Pri izvršavanju do petlje, računalo prvo izvršava tijelo petlje, tj. izraze unutar petlje, a zatim procjenjuje logički izraz. Ako je vrijednost izraza true, računalo se vraća na početak do petlje i ponavlja postupak; ako je vrijednost logičkog izraza false, izlazi iz petlje i nastavlja izvršavanje ostatka programa. Budući da se uvjet nastavljanja procjenjuje tek na kraju petlje, tijelo petlje se izvršava bar jedan put.

U slijedećem primjeru pseudokoda "igre", do petlja ima smisla u odnosu na while petlju jer osigurava barem jednu "igru", a osim toga, test koji se izvodi na kraju "igre" ne bi ni imao smisla na početku.

         do {
            Odigraj igru
            Pitaj korisnika želi li igrati još jednu igru
            Pročitaj korisnikov odgovor
         } while ( Korisnikov odgovor je da );


If izraz kaže računalu da izabere jedan od dvaju različitih tokova izvršavanja programa, u ovisnosti o vrijednosti zadanog logičkog izraza. If izraz "grananja" ili "odlučivanja" ima oblik:

        if (logički izraz)
            izraz
        else
            izraz

Računalo pri izvršavanju if izraza procjenjuje logički izraz koji vraća vrijednost true ili false. Ako je vrijednost true, računalo izvršava prvi izraz, a preskače izraz nakon "else". Ako je vrijednost izraza false, računalo preskače prvi izraz i izvršava drugi. U svakom slučaju, samo jedan od tih dvaju izraza unutar if izraza će biti izvršen. Dva izraza predstavljaju alternativne tokove programa; računalo se odlučuje za jedan od ovih tokova programa na osnovi vrijednosti logičkog izraza.

Jedna od mogućnosti primjene ove naredbe je odlučivanje samo da li će neka naredba biti izvršena ili ne. U tom slučaju if izraz nema else dio:

         if (logički izraz)
             izraz

Ako je vijednost izraza true, računalo izvršava izraz unutar if izraza, a u slučaju rezultata false ga preskače.

Korištenjem blokova, if izraz poprima oblik:

         if (logički izraz) {
             izrazi
         }
         else {
             izrazi
         }

ili samo:

         if (logički izraz) {
             izrazi
         }

Slijedi primjer if izraza koji zamjenjuje vrijednosti dviju varijabli, x i y, ali samo ako je x veći od y. Nakon izvršavanja ovog if izraza, možemo biti sigurni da je x manji ili jednak y:

         if ( x > y ) {  
           int temp; 	// deklariranje privremene varijable koja se koristi samo u ovom bloku
           temp = x;	// Sačuvaj kopiju vrijednosti varijable x u temp
           x = y;	// Kopiraj vrijednost varijable y u x
           y = temp;	// Kopiraj vrijednost varijable temp u y
         }

Na kraju evo primjer if izraza koji ima i dio else:

         if ( br_godina > 1 ) {
            System.out.print("Vrijednost ulaganja nakon ");
            System.out.print(br_godina);
            System.out.print(" godina je ");
         }
         else {
            System.out.print("Vrijednost ulaganja nakon 1 godine je ");
         }
         System.out.println(ulaganje +" kn");



[ prethodna stranica | Početak | sljedeća stranica ]