Оператор безусловной передачи управления

Оператор безусловной передачи управленияпредписатель для безусловного нарушения естественного хода выполнения программы в соответствии с требованием алгоритма.

Он реализует в программе указанные в алгоритме линии (стрелки) беспроверочных переходов. Например, переходы от блоков 6 к блокам 8 на условно-линейных схемах задачи об удельных нагрузках (рис. 4.4).

Структура оператора:

goto m;

, где goto – ключевое слово (идти к);

m – метка оператора, которому передаётся управление;

; – признак простого оператора.

Метка– буквенно-цифровое обозначение, позволяющее выделить (пометить) требуемый оператор в ряду других.

Правила составления и использования

Под меткой понимается идентификатор аналогичный имени переменной.

Идентификатор метки составляется пользователем произвольно, в ряду других меток программы.

Указанная в операторе goto метка записывается перед помечаемым оператором, отделяясь от него двоеточием.

Оператор, помеченный меткой m, может располагаться в соответствии с требованием алгоритма решения выше или ниже самого оператора goto, как указано в следующих фрагментах программы:

 

. . . goto f3; . . . f3:v=0.36; . . . met2:scanf(. . .); . . . goto met2; . . . goto t; t:x1=x; . . .

 

В первом фрагменте управление передаётся от оператора goto f3 вниз – оператору v = 0.36;, перед которым проставлена его метка. При этом расположенная между ними часть программы (последовательность операторов) выполнена не будет. Во втором - управление передаётся вверх на повторный ввод переменных. В третьем - управление передаётся следующему за goto оператору, что возможно, но бессмысленно, т. к. в этом случае естественный порядок следования операторов не нарушается.

Оператор, записанный под goto, должен быть помечен меткой другого оператора управления, иначе участок программы, записанный ниже goto, никогда не будет выполняться:

 

. . .

От другого goto A;

оператора B:x1=23.;

управления . . .

A:x2=x - 15.;

. . .

 

Метка m может проставляться только перед простым оператором. При необходимости передать управление на начало (конец) составного оператора (фигурную скобку) используется специальный пустой оператор (;). Он записывается над скобкой и помечается нужной меткой. Например:

 

goto M1; . . . M1:; {. . . goto M2; . . . M2:; }. . .

 

ü Внимание! Использование оператора безусловной передачи управления допускается, но не поощряется правилами структурного программирования, т.к. позволяет создавать нестандартные структуры с немотивированными передачами управления.