Оператор перехода указывает, что дальнейшая работа должна продолжаться в другой части программы, а именно с того места, где находится метка.
Переход внутрь сложного оператора запрещен (такими операторами являются составной и условный операторы, операторы цикла, варианта, присоединения).
Пример.Алгоритм Евклида.
Program Evklid1;
Label10;
Varm,n,d,q,r : word;
Begin
Read(m,n); Writeln('m = ',m,' n = ',n);
10:
If n>0 then
Begin
q:=m div n; r:=m mod n;
m:=n; n:=r;
Goto 10
End
d:=m; Writeln('d=',d)
End.
Примечание. Оператор q := m div n является избыточным, поскольку вычисленное значение q в программе Evklid1 не используется.
Рассмотрим вкратце, что собой представляет метка в программе.
При трансляции Паскаль-программы каждый ее оператор преобразуется в одну или несколько машинных команд. Эти команды размещаются в последовательных полях памяти. Каждая команда имеет конкретный адрес, определяемый адресом крайнего левого байта поля памяти, которое занимает команда. Команды, как правило, выполняются последовательно, в порядке их записи в памяти. Однако если встречается команда перехода, которой соответствует оператор Goto в Паскаль-программе, то дальше будет выполняться не следующая по порядку машинная команда, а команда, адрес которой указан в команде перехода. Этот адрес перехода и соответствует метке в Паскаль-программе.
Оператор Goto рекомендуется применять лишь в исключительных случаях, когда сложный фрагмент программы трудно реализовать без этого оператора или когда оператор перехода заметно повышает эффективность программы. В общем случае наличие в программе операторов Goto ухудшает понимание программы. Особенно недопустимым считается передача управления снизу вверх, как это сделано в программе Evklid1.
Ниже перечисляются случаи, когда целесообразно применять оператор Goto:
- выход из блока в вызывающую программу (переход с помощью оператора Goto на конец блока);
- переход на конец тела цикла;
- принудительный выход из цикла;
- переход к удаленному фрагменту программы.
Однако для того, чтобы явно не применять оператор Goto, в Турбо Паскале для первых трех случаев предусмотрены специальные операторы, а именно Exit, Continue и Break.
Примечание.Операторы Continue и Breakвведены в версии 7.0 языка Турбо Паскаль.
В частности, алгоритм Евклида легко реализовать без операторов Gotoс помощью операторов цикла Whileили Repeat.