
- •Технология программирования ветвящихся процессов
- •Программирование простых ветвлений
- •Программирование ветвления с элементарным условием
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Оператор безусловной передачи управления
- •Правила составления и использования
- •Операторы условной передачи управления
- •Укороченный оператор условного перехода
- •Правила записи и выполнения
- •Полный оператор условного перехода
- •Правила записи и использования
- •Составление программы по условно-линейной схеме варианта 1
- •Составление программы по условно-линейной схеме варианта 2
- •Программирование ветвлений с составными условиями
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Правила составления и выполнения логических выражений
- •Составление программы по условно-линейной схеме варианта 1
- •Составление программы по условно-линейной схеме варианта 2
- •Программирование сложных ветвлений
- •Программирование сложных многоузловых ветвлений
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Программа по левой условно-линейной схеме
- •Программа по правой условно-линейной схеме
- •Программирование сложных однооузловых ветвлений
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Правила составления и использования
- •Программа по левой условно-линейной схеме «множественное ветвление»
- •Программа по центральной условно-линейной схеме «множественное ветвление»
- •Программа по правой условно-линейной схеме «последовательное ветвление на два»
- •Заключение
- •Вопросы для контроля
Правила записи и выполнения
-
Метка m выбирается произвольно в ряду других меток программы.
-
Оператор, помеченный меткой m в соответствии с требованиями алгоритма, может располагаться как выше, так и ниже оператора if.
-
При выполнении проверяемого условия (результат – ИСТИНА), управление передаётся оператору goto, который в свою очередь передаёт управление оператору, помеченному меткой m, нарушая естественный порядок следования операторов.
-
Если результат проверки есть ЛОЖЬ, сохраняется естественный порядок следования операторов, т.е. управление передаётся оператору, записанному непосредственно под if.
Схема выполнения:
ЛОЖЬ
ИСТИНА
if(
Р
) goto m;
ветвь_НЕТ
m: . . .
В качестве ветви НЕТ может использоваться один (простой, составной) или несколько операторов. Например,
. . . if(.9>=c) goto M4; y2=15; M4: z=10.; . . . |
. . . if(.9>=c) goto M4; y2=15; n=2; M4: z=10.; . . . |
. . . if(.9>=c) goto M4; { y2=15; n=2; } M4: z=10.; . . . |
В каждом из фрагментов невыполнение проверяемого условия .9>=c (например, при c=1.6) приводит к выполнению ветви «НЕТ», т.е. операторов, записанных непосредственно под if до помеченного меткой М4, а затем и его тоже. Выполнение условия (например, при c=0.4) приводит к реализации оператора goto M4;, который (минуя операторы ветви «НЕТ») передаёт управление оператору с меткой М4.
В принципе, возможна реализация условно-линейного варианта полного ветвления (ветвь «НЕТ», затем ветвь «ДА») с использованием укороченного if и двух goto.
Структура имеет вид:
if(Р) goto m1;
ветвь_НЕТ
goto m2;
m1: ветвь_ДА
m2:
В качестве ветвей НЕТ (ДА) может использоваться один (простой, составной) или несколько операторов. Например,
. . . if(8 != b) goto m1; y=sin(15.); goto m2; m1:y=log(120.5); m2:printf(“\ny=%.2f”, y); . . . |
. . . if(8 != b) goto m1; y=sin(15.); n=2; goto m2; m1:y=log(120.5); n=1; m2:printf(“\ny=%.2f”, y); |
if(8 != b) goto m1; { y=sin(15.); n=2; } goto m2; m1:{ y=log(120.5); n=1; } m2:printf(“\ny=%.2f”, y); |
В каждом из фрагментов выполнение проверяемого условия (8 != b), например, при b=6 приводит к реализации оператора goto m1;, который (минуя операторы ветви «НЕТ») передаёт управление оператору (операторам) с его меткой m1. Выполняется ветвь «ДА», после чего сохраняется естественный порядок реализации операторов (вывод результатов). Невыполнение проверяемого условия (8 != b), например, при b=8 приводит к выполнению ветви «НЕТ», т.е. операторов, записанных непосредственно под if, включая goto m2; который в свою очередь передаёт управление (минуя операторы ветви «ДА») на вывод результатов (выход из ветвления).
-
Внимание! Использование укороченного оператора условной передачи управления со структурой if(Р) goto m допускается, но не поощряется правилами программирования, т.к. создаёт сложную структуру ветвления с использованием двух меток.