Структурные операторы представляют собой конструкции, построенные из других операторов по строго определенным правилам. Сложные операторы делятся на три группы: составные, условные и повтора.
Составной оператор представляет собой группу из произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками BEGIN и END.
Формат записи:
BEGIN
<Оператор 1>;
<Оператор 2>;
..............
<Оператор N>;
END;
Составные операторы воспринимаются как единое целое и может находиться в любом месте программы, где синтаксис языка допускает наличие оператора.
Условные операторы
В Turbo Pascal существуют два условных оператора: IF и CASE.
В случае разветвления вычислительного процесса от выполнения того или иного условия используются условные операторы IF, изменяющий естественный порядок выполнения операторов программы. Он может принимать одну из следующих форматов:
IF <условие> THEN <оператор 1> {Полный формат}
ELSE <оператор 2>;
IF < условие > THEN < оператор >; {Сокращенный формат}
Условие - логическое выражение булевского типа, т.е. принимает лишь два значения true или false. В случае записи условного оператора в полном формате, если значение выражения истинно, выполняется <оператор 1>, если ложно, то <оператор 2>. В случае сокращенной записи условного оператора, если результат логического выражения True, выполняется <оператор>, если False - оператор, следующий за оператором IF. Операторы if могут быть вложенными или сложными (структурными).
Пример:
if a*b=0 then beta:=a+b else beta:=(a*c+b*d)/(a*b);
if m=0 then sigma:=1 else if m<0 then sigma:=ln(abs(m))/ln(2)
else sigma:=exp(m-z);
Оператор выбора CASE. Обобщением условного оператора является оператор выбора, позволяющий одну из нескольких альтернативных ветвей программы в зависимости от значения некоторого выражения, называемого индексом выбора или селектором. Оператор выбора CASE позволяет сделать выбор из произвольного числа имеющихся вариантов. Он состоит из выражения, называемого селектором или индексом выбора, и списка параметров, каждому из которых предшествует список констант выбора, список может состоять и из одной константы.
Тип констант должен быть совместимым с типом селектора. Для индекса выбора запрещены типы real и string.
Формат:
CASE <индекс выбор -селектор> OF
<метки 1>:<Оператор 1>;
< метки 2>:<Оператор 2>;
.......................
< метки N>:<Оператор N>;
ELSE <Оператор m>;
END;
Пример: case alfa of 0: y:=sqr(x);
1: y:=exp(n*ln(x));
2: y:=cos(x);
7: y:=sin(x)/cos(x);
Операторы повтора
В практике часто возникает необходимость в организации циклического вычислительного процесса. Для организации компактной записи программы в языке Turbo Pascal существуют специальные операторы повтора FOR, REPEAT, WHILE, позволяющие многократно выполнять группу операторов тела цикла при различных значениях некоторой переменной, называемой параметром цикла.
Цикл с параметром
Если число повторений цикла известно к началу выполнения, например равно n, и величина шага равна единице или минус единицы, то можно использовать оператор цикла с параметром FOR.
Оператор повтора FOR состоит из заголовка и тела цикла. Он может быть представлен в двух форматах:
для шага параметра цикла равного единице (1)
FOR <параметр цикла>:=<нач.знач.> TO <кон.знач.> DO <оператор>;
для шага параметра цикла равного минус единице (-1)
FOR <параметр цикла>:=<нач.знач.> DOWNTO <кон.знач.> DO <оператор>;
FOR... DO - заголовок цикла; <нач.знач.> <кон.знач.> - выражения, определяющие соответственно начальное и конечное значение параметра цикла; <оператор> - тело цикла, представляющее собой совокупность простых, составных и структурных операторов, но может быть представлено и одним оператором.
Оператор FOR обеспечивает выполнения тела цикла до тех пор, пока не будут перебраны все значения параметра или индекса цикла о начального до конечного.
Параметр цикла, его начальное и конечное значения должны принадлежать одному и тому же типу. Допустим любой скалярный тип, кроме вещественного.
Пример: for i:=1 to n do begin s:=0;
for k:=1 to n do s:=s+b[ i, k ];
a[ i ]:=s;
writeln(‘a[ ‘, i,‘ ] = ‘,a[ i ]:12:6);
End;
Цикл с предусловием
Оператор повтора REPEAT состоит из заголовка, тела и условия окончания UNTIL.
Формат:
REPEAT <Оператор 1>;
<Оператор 2>;
..............
<Оператор N>;
UNTIL <условие - логическое выражение>;
Операторы, заключенные между словами REPEAT... UNTIL, являются телом цикла. В начале выполняется тело цикла, затем проверяется условие выхода из цикла. Если результат булевского выражения равен False, то цикл активизируется еще раз, если результат True - происходит выход из цикла. По крайней мере один из операторов тела цикла должен влиять на значение условия, иначе цикл будет выполняться бесконечно.
Цикл с постусловием
Оператор повтора WHILE аналогичен оператору REPEAT, но проверка условия выполнения цикла производится в начале оператора.
Формат:
WHILE <условие> DO <тело цикла>;
<условие> - булевское выражение, <тело цикла> - простой или составной оператор. Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен True, то тело цикла выполняется и снова вычисляется выражение условия, если результат равен False, происходит выход из цикла и переход к первому после WHILE оператору.
Оператор WITH
Для обращения к полям записи используется оператор WITH (с) который имеет формат:
WITH <переменная типа запись> DO <оператор>;
Указав переменную типа запись можно работать как с обычной переменной Turbo Pascal.
Пример: With RV do begin name:=‘ Сидоров В.С.’;
data:=‘ 15.11.78’;
End;