Подручја рада
Претрага
21. Безусловно гранање

Уводни део часа :
Шта радити у случају када су унети подаци нетачни или када желимо да, у посебним случајевима, раније завршимо програм ?
-------------------------------------------------------------------------------------------------------------------
Главни део часа :

Обично се искази извршавају оним редом којимм су записани у програму. Исказом goto можемо да задамо скок на неки други исказ. Исказ на који " скачемо " исказом goto мора да буде обележен. Обележје исказа је позитиван цео број од 0 до 9999 који стоји испред исказа. Синтаксни дијаграм је приказан на слици.
На пример : 44 : x:=35. Синтакса исказа goto је једноставна : goto обележје.
Сва исказна обележја морамо да декларишемо на почетку блока, пре свих других декларација. На пример, исказ Label 11, 77, 14, 15; декларише 4 обележја. Што се тиче домета обележја, важе иста правила као и за домет променљивих. Једно обележје можемо употребити у оном блоку у коме је оно декларисано и у свим уметнутим блоковима, али оно није доступно у надређеним блоковима.
Коришћење исказа goto није препоручљиво. Осим у неким изузетним случајевима, коришћење исказа
goto је у супротности са принципима доброг програмирања. Велики број програмских скокова по
правилу даје непрегледан и тешко разумљив програм, који је тешко тестирати и пронаћи му грешке.
Разлог лежи у томе што спољашњи изглед програма, у коме врви од исказа goto, не изражава његову
логичку структуру. Посебно су неразумљиви програми у којима је исказима goto, са скоковима
унапред и уназад, заплетен ток извршавања програма. Овакви програми су написани у
" шпагети - стилу". PASCAL, по својој природи одвраћа од таквог стила, који је чест нпр. у FORTRAN-у.
Упркос описаним непријатностима, у неким изузетним случајевима коришћење исказа goto је ипак
природно. Такав је случај са скоком на крај програма, када се покаже да су подаци били погрешни и
да даље извршавање програма нема смисла. Сличан пример је превремен излаз из потпрограма,
који се реализује скоком пред последњи end у потпрограму.

Пример goto обележја је :

goto 10;

10 : naredba1;

Обележје у овом примеру је број 10. Сва обележја се морају унапред дефинисати у одељку за опис обележја.
Исправно написан одељак за опис обележја је :

label 1, 10, 23, 9934;

Неисправно написан одељак за опис обележја је :

label -1, 10000, 0.1;

У овом примеру прво и друго обележје излазе из дозвољеног опсега, а треће обележје није цео број.

Исказ goto је прост исказ који указује на то да даљу обраду треба наставити у другом делу програмског текста, односно са места на коме је лабела.

Свака лабела :

1. мора се појавити у декларацији лабеле пре свог појављивања у блоку;
2. мора претходити једном и само једном исказу који се појављује у исказном делу блока;
3. има област важења у целокупном тексту тог блока, искључујући све угнежђене блокове који поново декларишу ту лабелу.

Бар један од следећа 3 услова мора важити за лабеле и исказе goto који се позивају на те лабеле :

1. лабела претходи исказу који садржи исказ goto;
2. лабела претходи неком исказу у следу исказа ( унутар сложеног исказа или исказа repeat ), а било који исказ у следу
исказа садржи исказ goto;
3. лабела претходи неком исказу у следу исказа који чини исказни део блока који садржи декларацију процедуре
или функције који садржи исказ goto.

Исказ goto треба сачувати за неуобичајене или ретке ситуације где је потребно разбити природну структуру алгоритма.
Добро је правило да треба избегавати употребу скокова при изражавању правилних понављања и условних
извршавања исказа, јер такви скокови уништавају одраз структуре обраде у статичким ( текстуалним ) структурама програма. Недостатак слагања између статичке и динамичке структуре погубан је по јасноћу програма и чини проверу много тежом. Постојање исказа goto у PASCAL програму често указује на то да програмер још није научио " мислити " у PASCAL - у ( јер је у неким другим програмским језицима goto неопходна инструкција ).

goto.jpg

Одговорити на питања :
1. Зашто избегавамо употребу исказа goto ?
2. Када је пожељно користити наредбу goto и шта мора имати свака лабела ?
3. Који услови морају бити испуњени за лабеле и исказе goto који се позивају на те лабеле ?
4. У ком опсегу се налази обележје наредбе goto ? Написати пример исправног и неисправног обележја.
5. Где није допуштен скок са наредбом goto ? Нацртати синтаксни дијаграм наредбе goto.