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