Algoritam sa cikličnom strukturom – petlje sa uslovnim izlazom

            Opšta karakteristika cikličnih algoritamskih struktura jeste višestruko izvršavanje jednog ili više algoritamskih koraka pri jednom izvršavanju algoritma. Instrukcije ciklusa omogućavaju da se određena grupa instrukcija sistematički ponavlja dok se ne ispuni uslova za prekid ponavljanja. Ciklična struktura zove se još i petlja, a uslov za izlazak iz ciklusa zove se izlazni kriterijum. Izlazni kriterijum je najčešće ili broj izvršenih ciklusa ili dostignuta tačnost u računanju.

            Karakteristični algoritmi ove vrste su brojački cikljusi pri čemu brojanje može biti u napred i u nazad. Unapred – znači od početne do krajnje vrednosti sa fiksnim pozitivnim korakom, gde je izlazni kriterijum da li je dostignuta ili premašena krajnja vrednost. Brojanje unazada znači od krajnje vrednosti do početne sa fiksnim negativnim korakom.

            Osnovne vrste ciklusa ili petlji (loop) su sledeće:

      ·    Petlje sa uslovnim izlazom (WHILE – DO, REPEAT – UNTIL, LOOP – EXIT)

      ·    Petlje sa eksplicitnim brojačem (FOR)

      ·    Petlje sa implicitnim brojačem (LOOP – TIMES)

      ·    Beskonačne petlje sa i bez mehanizma uslovnog izlaza (LOOP)

      ·    Petlje po elementima skupa.

  Mi ćemo detaljno obraditi samo prve dve grupe cikličnih struktura.

Ciklusi mogu da obuhvataju i druge cikluse, tzv. gneždenje. U tom slučaju važi sledeće osnovno pravilo za petlje. Spoljnja petlja mora da obuhvata sve instrukcije svake unutrašnje petlje. 

Petlje sa uslovnim izlazom

 

            Postoje tri vrste ovih petlji: sa izlazom na vrhu (WHILE – DO), sa izlazom na dnu (REPEAT – UNTIL) i sa izlazom u sredini (LOOP – EXIT). Princip rada petlje sa izlazom na vrhu dat je na sledećoj slici:

                                           

            Ova kontrolna struktura se u povudojeziku zapisuje na sledeći način:

                    WHILE   P   DO    B   END_WHILE      ili

                    WHILE   P    DO

                                           B

                    END_WHILE

            Na slici c) dat je primer ovakve petlje realizovan pomoću brojača unazad (od n do 0). Karakteristika ovih petlji je da se instrukcije koje pripadaju bloku B mogu izvršiti više puta, ali se ne moraju izvršiti ni jednom ukoliko uslov P u startu nije zadovoljen.

           

Primer: Napiši algoritam koji sabira sve parne brojeve manje od 10

                                              

                                         

U povudojeziku rešenje izgleda ovako:

            BEGIN

                        z:= 0;

                        x:= 2;

                                    WHILE X<10 DO

                                                z:= z+x;

                                                x:= x+2

                                    END_WHILE;

                        WRITE(z)

            END

            Princip rada petlje sa izlazom na dnu prikazan je na sledećoj slici:

                                               

        Osnovna karakteristika ove petlje je da omogućava višestruko ponavljanje bloka B, pri čemu se taj blok mora izvršiti barem jednom, jer se istinitost uslova P za izlaz iz petlje proverava tek na kraju petlje.

        U povudojeziku ova kontrolna struktura se zapisuje pomoću instrukcije REPEAT   B   UNTIL   P   END_REPEAT (ponavljaj dok nije) i to izgleda ovako:

            REPEAT    B    UNTIL    P    END_REPEAT    ili

            REPEAT

                        B

            UNTIL   P

            END_REPEAT

Na primeru algoritma koji sabira sve parne brojeve manje od 10 to izgleda ovako:

            BEGIN

                        z:=0;

                        x:=2;

                                    REPEAT

                                                z:=z+x;

                                                x:=x+2

                                    UNTIL  x>=10

                                    END_REPEAT;

                        WRITE(z)

            END

 

            Petlja sa uslovnim izlazom na sredini ima osobinu da se blok koji se ponavlja sastoji iz dva dela B1 i B2. Petlja se realizuje tako da se najpre izvrši blok B1 a zatim se proverava da li je ispunjen uslov P za izlazak iz petlje. Ako uslov nije ispunjen izvršava se blok B2 i automatski se skače na početak petlje. Petlja se ponavlja, tj. opet se izvršava blok B1, zatim se opet proverava uslov P za izlazak iz petlje itd. Ako predikat P uzme vrednost true (tačno) onda se izlazi iz ove strukture tj. prelazi se na izvršavanje prve naredne instrukcije koja sledi iza oznake kraja petlje. Forma ove petlje izgleda ovako:

                                         

        Notacija petlje sa izlazom na sredini na povudojeziku može biti dvojaka:

                    LOOP

                       B1

                    WHEN   P   EXIT

                       B2

                    END_LOOP

 

                    LOOP

                                B1;

                                IF   not(P)   THEN    EXIT   END_IF;

                                B2

                    END_LOOP

U ovoj notaciji se podrazumeva da se sa kraja navedene petlje automatski (bezuslovno) skače na početak, a izlaz iz petlje realizuje se pomoću strukture EXIT.  Ako predikat P uzme vrednost true (tačno) onda se izlazi iz LOOP-EXIT strukture, tj. prelazi se na izvršavanje prve instrukcije koja sledi oznaku kraja petlje END_LOOP.

            Petlje ovog tipa su najopštiji oblik petlje sa uslovnim izlazom. Veoma mali broj savremenih programskih jezika poseduje ovu opštu vrstu petlje tako da se njeno dejstvo obično simulira primenom drugih raspoloživih osnovnih kontrolnih struktura.