Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР6-С++-27 марта-2012.doc
Скачиваний:
17
Добавлен:
28.08.2019
Размер:
6.55 Mб
Скачать

1.5. Оператор перехода

Любой оператор программы на С++ мо­жет быть снабжен меткой или несколькими метками.

С помощью метки данный оператор выделяется (находится) среди дру­гих операторов.

В качестве меток могут использоваться любые идентификаторы, приме­ры меток: M, M1, АА, М11, FINISH, START. Метка ставится перед опера­тором и отделяется от него двоеточием. Пусть, например, требуется меткой М2 пометить оператор присваивания X = X + 1; Это следует за­писать в виде

М2: X = X + 1;

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

В С++ установлено, что операторы программы выполняются в естест­венной последовательности, то есть в порядке их написания слева на­право и сверху вниз. Однако очень часто возникает необходимость нару­шить естественный порядок выполнения операторов программы, например, пропустить группу операторов или некоторые из них выполнить повторно. Для этой цели в С++ предусмотрен специальный оператор, называемый оператором перехода (его называют также оператором безусловной передачи управления).

Синтаксис оператор перехода в С++:

[метка:] goто константа типа метки;

Ключевое слово goто пишется слитно.

Управление разрешается передавать на метки только внутри данной функции.

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

Пример 6.1.

Требуется составить программу суммирования выражения

где x = 0,534.

Программа может иметь вид

у = 0;

i = 1;

SUM: у = у + pow(x, i);

i = i + 1;

if i <= 10 goto SUM;

Данный пример иллюстрирует применение оператора перехода для про­граммирования циклических процессов, являющихся разновидностью развет­вляющихся вычислительных процессов.

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

Пример 6.2.

Описать алгоритм, представленный на рис. 6.1

Рис. 6.1. Блок-схема алгоритма примера 6.2

Фрагмент программы на языке С++, реализующий алгоритм, представлений на рис. 6.1, имеет вид:

if n >= 0 goto M1;

else goto M2;

M1: p = n + b; s = a*a +l; x = sqrt(p + s); goto M3;

M2: x = n*n – b;

M3: z = x – r*r;

Данный оператор – очень мощное и небезопасное средство управления поведением программы. Использовать его нужно крайне осторожно, так как, например, "прыжок" внутрь цикла (обход кодов инициализации) может привести к трудно локали­зуемым ошибкам.

Метки локализуются в сфере действия функции. Описания и опре­деления, после которых помещен символ "точка с запятой", считаются операторами.

Перед пустым оператором также имеет право стоять метка.

Метки можно размещать во всех точках программы, где син­таксис разрешает использовать операторы.

Внимание: Использование оператора goto не было одобрено разработчиками алгоритмических языков еще в 1960-х го­дах. Он существенно затрудняет контроль последовательности выполнения операторов программы, а также является источником ошибок при последующих модификациях. Любая программа, в которой был использован оператор goto, может быть переписана без него.

Правило: Для оператора goto существует только одно правило – никогда не используйте оператор goto в своих программах!