Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_inf_1.doc
Скачиваний:
0
Добавлен:
02.09.2019
Размер:
124.93 Кб
Скачать

2.6. Оператор перехода и пустой оператор Оператор перехода имеет вид

goto P

где Р - метка, которой помечен некоторый иной оператор в программе. Использованное здесь зарезервированное слово GOTO имеет смысл перейти. В данном случае речь идет о переходе на метку, указанную после оператора GOTO (и которой помечен иной оператор в про­грамме).

Оператор перехода предназначен для передачи управления в другую точку в программе (т.е. для нарушения естественного порядка выполне­ния операторов). Так, оператор перехода

goto 11

передаст управление оператору с этой меткой, например

11: writeln

В Turbo Pascal допускается использовать в качестве меток как числа (от 1 до 9999), так и идентификаторы.

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

Все метки, используемые в программе, должны быть объявлены. Раздел описания меток находится между заголовком и телом програм­мы. Текст программы, в которой использован оператор перехода, содер­жится в примере :

program jump;

label 1;

var n:integer;

begin

read (n);

if n>1000 then goto 1

else n:=n+100;

write(n); 1: end.

В программе Jump в разделе описания меток (LABEL) объявлена мет­ка 1. Программа работает так. Вводится с клавиатуры значение пере­менной N(типа. Integer). Если это значение превышает 1000, программа сразу завершается (поскольку метка 1 расположена рядом с зарезерви­рованным словом END, завершающим программу). В противном случае к значению N прибавляется 100 и оно выводится на экран.

Злоупотреблять использованием операторов GOTO не рекомендует­ся, поскольку в результате получаются малопонятные программы, тем более, что без оператора GOTO, как правило, можно обойтись другими средствами Turbo Pascal. Так, тело программы из предыдущего примера можно преобразовать следующим образом:

begin

read (n);

if n<=1000 then

begin

n:=n+100;

write(n)

end;

end.

Если метка используется внутри процеду­ры или функции, она "видна" только в пределах этой процедуры или функции и должна быть описана в ней. Иными словами, передача управ­ления снаружи внутрь процедуры или функции с помощью оператора пе­рехода невозможна.

О пустом операторе. Обратим внимание на метку в предыдущем примере. Вот как выглядит соответствующий фрагмент этой программы:

if n>1000 then goto 1

else n:=n+100;

write(n);

l:end.

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

Пустой оператор не выполняет никаких действий и в тексте про­граммы о его присутствии свидетельствует только один символ "точка с запятой" (;). В конце составного оператора, перед за­резервированным словом END точка с запятой необязательна. Однако, когда рядом со словом END расположена метка, в этом случае перед меткой обязательно должна присутствовать точка с запятой, назначе­ние которой в этом случае - послужить разделителем между последним реальным оператором и пустым оператором.

Понятие пустой оператор делает возможными в программах такие экзотические конструкции, как

begin ;;;;; end;

или

while p do begin end;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]