Algoritam sa razgranatom linijskom strukturom

            Kod prostih linijskih struktura prelazak na sledeći korak ne zavisi od rezultata obrade u ma kom algoritamskom koraku. Međutim, u praksi tok računanja najčešće zavisi od međurezultata dobijenih u toku računanja ili od konkretnih vrednosti polaznih podataka. To znači da u algoritmaima mora postojati algoritamski korak u kojem se donosi odluka o daljem toku računskog procesa tj. o prenošenju upravljanja na jedan ili drugi algoritamski korak, a to su blokovi za selekciju (blokovi sa razgranatom linijskom strukturom).

            Selekcije imaju za cilj da ispitaju ispunjenost nekog uslova i da u zavisnosti od rezultata ovog ispitivanja odaberu za izvršavanje jednu od dve a ponekad jednu od više algoritamskih blokova. Ukoliko se odabira jedna od dva algoritamska bloka to se zove osnovna selekcija. Na sledećoj slici prikazan je standardni i strukturirani dijagram toka osnovne selekcije:

            Najpre se izračunava uslov (predikat) P od čije vrednosti (tačno ili netačno) zavisi dalji tok izvođenja algortma (programa). Jedan izlaz iz uslovnog algoritamskog koraka prenosi upravljanje na linijsku strukturu B u slučaju da je navedena relacija zadovoljena (označeno sa T, tačno – true). Drugi korak prenosi upravljanje na prostu linijsku strukturu A u slučaju da relacija nije zadovoljena (označeno sa F, netačno – false).

            Ovo znači da se pri jednom izvršavanju algoritma sa razgranatom linijskom strukturom nikad ne izvršavaju obe strukture A i B već se (zavisno od početnih podataka i međurezultata, tj. od ispunjenosti uslova) izvršava samo jedna od njih. Kod algoritma sa razgranatom strukturom svaki algoritamski korak se izvršava najviše jednom, pri čemu se ne moraju izvršavati svi algoritamski koraci u toku jednog izvršenja algoritma.

            U povudojeziku osnovnu selekciju predstavlja blok tipa IF – THEN – ELSE (ako – onda – inače) i označava se na sledeći način:

            IF    P   THEN    B    ELSE    A    END_IF

Reč IF označava početnu tačku bloka, a reč END_IF označava kraj bloka. A i B su blokovi koji mogu imati jednu, ali i više instrukcija. U slučaju kada su blokovi A i B duži od jedne instrukcije ova kontrolna struktura se zapisuje na jedan od sledeća dva načina:

      IF  P                               ili                            IF  P

     THEN                                                            THEN

                 B1;                                                          BEGIN

            B2;;                                                                  B1;

            ....;                                                                    ....;

            Bn                                                                    Bn

                                                                            END

 ELSE                                                            ELSE

            A1;                                                           BEGIN

       A2;                                                                A1;

        ... ;                                                                   ... ;

        An                                                                   An

 END_IF                                                             END

                                                                        END_IF

Na primeru određivanja većeg od uneta dva broja može se pisati sledeće:

     IF x>y THEN m:=x ELSE m:=y END__IF

     ili se može pistai na sledeći način:

IF x>y

THEN

     m:=x

ELSE

     m:=y

END_IF

Predikat P je ovde x>y i on može biti istinit iskaz ili neistinit. Ako je istinit (T) onda se izvršava instrukcija m:=x, ako je iskaz P neistinit (F) onda se izvršava instrukcija m:=y.

Specijalni slučaj selekcije je preskok koji je prikazan na sledećoj slici:

Ako je uslov P zadovoljen onda se izvršava blok B, a u protivnom se izvršavanje ovog bloka preskače i odmah se izlazi iz navedene kontrolne strukture. Zapis ove kontrolne strukture u povudojeziku je:

            IF    P    THEN   B   END_IF

Ova struktura se dobija kada se izostavi ELSE iz strukture IF – THEN – ELSE.

            Npr. sledeći niz instrukcija na povudojeziku takođe može poslužiti za određivanje većeg od uneta dva broja:

m:=y;

IF  x>y THEN m:=x END_IF

            Struktura IF-THEN-ELSE se može predstaviti i preko dve IF-THEN strukture na sledeći način:

            IF   P   THEN   B   ELSE   A   END_IF

može se prikazati kao:

            IF    P   THEN   B   END_IF

            IF   not(P)  THEN   A   END_IF

Ako je uslov ispunjen izvršiće se blok B u prvoj instrukciji. Ako uslov nije ispunjen blok B se neće izvršiti. Tada se prelazi na sledeću naredbu u kojoj uslov not(P) mora biti ispunjen ako uslov P nije ispunjen i tada se izvršava blok A u drugoj instrukciji.

           

            Kod selekcije se u opštem slučaju može izabrati jedan od n blokova tako da se izvršava samo jedan od njih. Izbor bloka koji će se izvršiti može da zavisi od odabranog logičkog izraza ili od neke selektorske promenljive. Ovaj oblik selekcije se zasniva na testiranju vrednosti selektorske promenljive sel.

Ukoliko je vrednost selektorske promenljive (sel) jednaka a tada se izvršava blok A, ukoliko je b tada se izvršava blok B itd, ukoliko je z tada se izvršava blok Z. Ukoliko vredsnost selektorske promenljive nije ni jedna od a do z tada se izvršava blok Ω koji se naziva propust (default).

            U povudojeziku zapis je sledeći:

CASE sel OF

a: A;

b: B;

...

z: Z

ELSE Ω

END_CASE

           ili

IF sel=a

THEN A

ELSE      IF sel=b

             THEN B

             ELSE ..................

 

                      ELSE     IF sel=z

                                  THEN Z

                                  ELSE Ω

                                  END_IF

                      END_IF

             END_IF

END_IF