Все операторы Паскаля условно можно разбить на простые и структурные. Структурные включают в свой состав другие операторы. В частности, в условном операторе, операторе выбора и двух операторах цикла может быть записан только один внутренний оператор. Это ограничение можно обойти, если использовать операторные скобки или составной оператор. Он имеет следующий вид:
Begin
<оператор1>;
<оператор2>;
...
<операторn>
end
Пример: вся программа состоит из одного составного оператора.
Пустой оператор
Пустой оператор никак не обозначается и не вызывает действий – это просто лишняя точка с запятой в программе. Предназначен он в качестве носителя метки, если ее необходимо поставить перед словом END в конце составного оператора или программы. Поэтому любой оператор может заканчиваться одной или несколькими точками с запятой.
Безусловный оператор перехода
Это единственный оператор, в котором используется метка. Он имеет вид:
Go To <метка>;
После выполнения этого оператора будет осуществлен переход на оператор, перед которым стоит указанная метка.
Использование безусловных передач управления в программе считается теоретически избыточным для многих языков высокого уровня и способствует созданию малопонятных и трудно модифицируемых программ, которые вызывают сложности при отладке и сопровождении. Если же программист считает, что без условных переходов не обойтись, то необходимо выполнять следующие условия:
1. Не допускаются переходы внутрь подпрограмм (процедур и функций) или из них.
2. Переход внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя компилятор не выдает сообщение об ошибке.
Примером на условный и безусловный операторы можно считать алгоритм вычисления кубического корня, хотя реально для этих целей удобнее и нагляднее использовать один из операторов цикла без параметра.
Program S;
Label L;
Const Eps = 1E-6; {определим точность как константу}
Var a,x,y:real;
Begin
WriteLn (‘Введите число для определения кубического корня’);
Read (a);
x:= a;
L: y:= x; {«старим» предыдущее значение}
x:= 1/3*(a/sqr(y)+2*y); {вычисляем новое значение}
If Abs(x-y)>Eps Then
GoTo L; {повторим, если разность старого и нового значений не достигла заданной точности}
WriteLn (‘Значение корня:’, x:10:6);
End.