Использование оператора безусловного перехода в программе считается признаком плохого стиля программирования. Для основных вариантов использования goto в язык Паскаль введены специальные процедуры: break - переход на оператор, следующий за циклом, exit - переход за последний оператор процедуры, continue - переход за последний оператор в теле цикла.
Один из немногих примеров уместного использования оператора goto в программе - выход из нескольких вложенных циклов одновременно. Например, при поиске элемента k в двумерном массиве:
var a: array [1..10,1..10] of integer;
...
var found := False;
forvar i:=1 to 10 do
forvar j:=1 to 10 do
if a[i,j]=k then
begin
found := True;
goto c1;
end;
c1: writeln(found);
Операторы break, continue и exit
Операторы break и continue используются только внутри циклов.
Оператор break предназначен для досрочного завершения цикла. При его выполнении происходит немедленный выход из текущего цикла и переход к выполнению оператора, следующего за циклом. Оператор continue завершает текущую итерацию цикла, осуществляя переход к концу тела цикла. Например:
flag := False;
forvar i:=1 to 10 do
begin
read(x);
if x<0 thencontinue; // пропуск текущей итерации цикла
if x=5 then
begin
flag := True;
break; // выход из цикла
end;
end;
Использование операторов break и continue вне тела цикла ошибочно.
Оператор exit предназначен для досрочного завершения процедуры или функции. Например
function Analyze(x: integer): boolean;
begin
if x<0 then
begin
Result := False;
exit
end;
...
end;
Вызов exit в разделе операторов основной программы приводит к ее немедленному завершению.
Следует отметить, что в PascalABC.NET (в отличие от Borland Pascal и Borland Delphi) break, continue и exit являются не процедурами, а именно операторами.
Оператор try ... except
Оператор try ... except имеет вид:
try
операторы
except
блок обработки исключений
end;
Блок try называется защищаемым блоком. Если при выполнении программы в нем происходит ошибка, то он завершается и выполнение передается блоку except. Если исключение обрабатывается в блоке except, то после его обработки программа продолжает выполняться с оператора, следующего за try ... except ... end. Если исключение остается необработанным и имеется объемлющий блок try, то выполнение передается его блоку except. Если объемлющего блока try нет, то программа завершается с ошибкой. Наконец, если в блоке try ошибки не произошло, то блок except игнорируется и выполнение программы продолжается дальше.
Если в процессе обработки исключения (в блоке except) произошло другое исключение, то текущий блок except завершается, первое исключение считается необработанным и обработка нового исключения передается объемлющему блоку try. Таким образом, в каждый момент времени существует максимум одно необработанное исключение.
Блок обработки исключений представляет собой либо последовательность операторов, разделенных точкой с запятой, либо последовательность обработчиков исключений вида
onимя: типdoоператор
Обработчики разделяются символом ';', после последнего обработчика также может следовать символ ';'. Здесь