Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Ветвление программы




Создание управляющих структур

В главе 1 рассмотрен ветвящийся алгоритм, предусматривающий наличие нескольких альтернативных путей с выбором одного из них на основании значения некоторого логического выражения (см. рис. 1.9,б,в). Для реализации ветвлений используются структуры if-then, if-then-else, if-end if, select case – end select, on – goto и on – gosub.

Структуры if-then, if-then-else используются для создания сходящихся и не сходящихся ветвлений и называются условными операторами. Формат операторов имеет следующий вид:

If < логическое выражение > then < действие>

или

If < логическое выражение > then < действие_1> else < действие_2>

Слово "действие" обозначает список операторов, написанных в одну строку и разделенных двоеточием. Например, if a=10 then b=100: c=20 else d=20.

Если логическое выражение имеет значение true, то выполняется единственное значение в первом операторе и действие_1 во втором. В противном случае первый оператор не производит никаких действий, во втором – выполняется действие_2. Использование в логических операторах команды передачи управления goto МЕТКА [5] позволяет создать не сходящееся ветвление, при котором альтернативные пути не сходятся в одну точку. Этот оператор может входить в единственное "действие" первого оператора, а также в действие_1 и в действие_2 второго. [6]

Существенным ограничением условных операторов является необходимость записи в одну строку операторов, выполняющих действия. Конечно, существуют символы переноса строк программы, но в каждом диалекте языка эти символы свои и запоминать их не имеет смысла. Кроме того, при достаточно сложных логических выражениях или наличии логических выражений в "действиях" значительно сокращается "жизненное пространство" операторов, реализующих альтернативные пути алгоритма. Построение сложных условий управления выбором ветвей в этих операторах возможно, но не наглядно и трудно обозримо. От этого недостатка свободны остальные четыре из перечисленных структур.

Операторы if – end if называются "блочным if" и образуют структуру, имеющую следующий формат операторов, приведенный на рис. 4.8.

 

 

Формат оператора Пример
If<логическое выражение_1> Then <действие_1> Elseif <логическое выражение_2> Then <действие_2> ... Elseif <логическое выражение_n-1> Then <действие _n-1> Else <действие_n> End if.   If a=10 Then B=20 C=30 Elseif (a=20 and c=40) Then B=50 If g= -1 Then Exit if Else B=100 End if
а) б)
Рис. 4.8. Формат оператора "блочный if" (а) и пример его применения (б)

Легко сообразить, что действия, перечисленные в блочном if, выполняются только при истинности соответствующих логических выражений. Сами действия могут быть записаны во множествах строк, что очень удобно.

Структура select case – end select обеспечивает получение ветвящегося не сходящегося алгоритма с выбором одного из альтернативных путей в зависимости от значения вычисляемого выражения. Получающаяся структура и пример ее реализации приведены на рис. 4.9. При попадании значения вычисляемого выражения в список выполняются соответствующие действия. Если значение выражения не попадает ни в один список, то выполняется действия, стоящие после оператора else.

Select case <выражение> Case <список_значений_1> <действия_1> Case <список_значений_2> <действия_2> ... Case <список_значений_n> <действия_n> Else <действия_n+1> End select   Select case 3*a+b ' 3*а+b выражение Case 1,3,5,7 '1,3,5,7 – список_1 C=sin(x) ' действия_1 Case 2,4,6,8'2,4,6,8 – список_2 C=cos(x) ' действия_2 Else C=0 ' действия_3 End select
а) б)
Рис. 4.9. Формат операторов select-end select (а) и пример их применения (б).

Количество операторов elseif в "блочном if" и операторов "case" в структуре select case – end select произвольно, а оператор else в обеих структурах не обязателен. Принудительный выход из обеих структур осуществляется операторами exit if и exit select, но не оператором goto.

Предупреждение! Возможность многострочной записи операторов в структурах "if-end if" и "select-end select" создает соблазн ставить метки внутри групп операторов, выполняющих действия, и переходить внутрь структуры, минуя ее заголовок (if или select), или переходить из одной группы операторов в другую. Этого делать ни в коем случае не следует, т.к. компилятор пропустит эту неточность, а при выполнении программы, особенно многократном, может возникнуть переполнение сегмента стека адресов возврата ([5, стр. 44]).

Структуры on – goto и on – gosub реализуют ветвящийся алгоритм по значению вычисляемого выражения, имеющего значение целого типа, на основе фрагментов программы с метками. Первую структуру следует применять для реализации не сходящегося ветвления, вторую – для сходящегося. Общий вид структур и примеров их применения приведен на
рис. 4.10. Стрелками показана передача управления выполнением алгоритма.

On <выражение> Goto<список меток> ... METKA1: <действия_1> End METKA2 <действия_2> End ... METKAn <действия_n> End On int(3*b) Goto M1, M2, M3 ... M1: F=10 End M2: F=20 End M3: F=30 End
On <выражение> Gosub<список меток> Оператор, следующий за On-Gosub ... METKA1: <действия_1> Return METKA2 <действия_2> Return ... METKAn <действия_n> Return On int(3*b) Gosub M1, M2, M3 ... M1: F=10 Return M2: F=20 Return M3: F=30 Return ...
а) б)
Рис. 4.10. Общий вид структур on-goto и on-gosub (а) и примеры их применения (б)

Вычисляемое выражение определяет номер метки в списке. Если значение выражения равно нулю или превышает число меток, то операторы
on goto и on gosub игнорируются.





Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 591; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.