- •Составитель а.М. Сулейманова
- •Содержание
- •Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 лабораторная работа
- •Цель работы
- •Теоретическая часть
- •2.1. Оператор присваивания
- •2.2. Составной оператор
- •2.3. Условные операторы
- •Оператор if
- •2.3.2. Оператор case
- •Оператор case имеет вид
- •2.4. Операторы цикла
- •2.4.1. Оператор while
- •2.4.2. Оператор repeat
- •2.4.3. Оператор for
- •2.5. Вложенные циклы
- •2.6. Оператор перехода и пустой оператор Оператор перехода имеет вид
- •3. Порядок выполнения работы
- •4. Требования к отчету
- •5. Контрольные вопросы
- •6. Варианты заданий
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;
Разумеется, от подобных операторов мало проку и чуть ли не единственная практическая польза от пустого оператора — возможность передать управление (с помощью оператора перехода) на конец составного оператора.