Структурированные операторы

Напомним, что структурированные операторы — это операторы, которые изменяют ход выполнения команд программы.

К числу структурированных операторов можно отнести:

Рассмотрим эти операторы.

Оператор перехода

Оператор перехода позволяет перейти от текущего места выполнения программы к другому месту, которое не является следующим по порядку. Данный оператор нарушает нормальный ход выполнения программы.

Переход осуществляется при помощи так называемых меток. Метка — это идентификатор или целое число без знака в диапазоне от 0 до 9999, которое находится перед каким-либо оператором программы и отделено от него двоеточием. Все используемые в программе метки должны быть предварительно объявлены в разделе объявления меток, начинающемся словом label.

Оператор перехода выглядит так:

goto метка;

Приведем фрагмент программы, в которой используется метка:

label 1; // Объявляем метку с именем 1
var
а:integer; begin
а:=10;
goto 1; // Переход на метку 1
a:=sqrt(a); // Этот оператор не будет выполняться никогда! 1:а:=а+а; // Оператор, помеченный меткой 1 end;

Примечание

Использование меток и операторов перехода не является хорошим тоном программирования. Старайтесь по возможности не использовать этот оператор, т. к. это затрудняет чтение текста программы.

Оператор условия

Оператор условия предназначен для выполнения или невыполнения каких-либо действий, зависящих от результата условия типа Boolean. Этот оператор применяют для разветвления выполнения программы. То есть, если данное условие истинно (и только в этом случае!), выполняется некоторая последовательность операторов, иначе — выполняются другие операторы. Вид оператора условия таков:

If условие then оператор1 else оператор2;

Оператор условия может быть записан и в упрощенной форме:

If условие then оператор;

Приведем примеры использования операторов условия:

If a>0 then b:=sqrt(a) else b:=a*2; // Оператор условия
If a=10 then b:=b+l; // Упрощенная форма

Для того чтобы организовать ветвление на несколько направлений (более двух), можно использовать несколько операторов условия, вложенных друг в друга. Вложение операторов условия происходит по тем же правилам, что и вложение составных операторов.

Примечание

Старайтесь не злоупотреблять чрезмерным вложением операторов условия друг в друга, т. к. это может привести к трудно выявляемым ошибкам.

Оператор выбора

Оператор выбора — это конструкция языка, позволяющая сделать выбор из произвольного числа вариантов и выполнить в соответствии с этим выбором определенные действия. То есть оператор выбора позволяет обойтись без использования нескольких операторов if.

Оператор выбора имеет следующий вид:

case селектор of 
     Список1: Оператор1;
. . . СписокN: ОператорN; else
Оператор; end;

Таким образом, оператор выбора case состоит из селектора, списка вариантов и необязательной части else.

Выражение-селектор должно быть обязательно порядкового типа. Нельзя использовать в качестве селектора строковые типы.

Каждое значение списка вариантов представляет собой вариант значения, принимаемого селектором. Оно должно быть:

Приведем пример использования оператора case (листинг 3.4).

Листинг 3.4. Пример использования оператора case

case I of // В зависимости  от значения переменной I
1..5: С := 'До пяти'; // Если оно от 1 до 5, то переменная С='До пяти' 6..9: С := 'Выше пяти'; // Если оно от б до 9, то переменная С='Выше
// пяти' 0, 10..99: С := 'Вне области допустимых значений'; // Если оно равно 0
// или от 10 до 99, то С='Вне области допустимых значений' else
С := ''; // Иначе, если ни одно из условий не выполняется,
//С равно пустой строке end;

Таким образом, мы с помощью одного оператора case охватили множество значений. Более того, код программы читается довольно легко. Посмотрим, что было бы, если бы для той же самой задачи мы использовали оператор условия (листинг 3.5).

Листинг 3.5. Пример использования оператора условия

if I in [1..5]  then
  С := 'До пяти' 
  else if I in [6..10] then 
     С := 'Выше пяти'
else if (I = 0) or (I in [10..99]) then С := 'Вне области допустимых значений' else
С := ";

На листинге 3.5 получилась довольно тяжело читаемая конструкция.

Операторы цикла

Иногда необходимо, чтобы какая-либо часть программы выполнялась несколько раз. Для этого во всех языках программирования, в том числе и в языке Object Pascal, используются циклы.

Цикл — это последовательность операторов, команд, которая выполняется более одного раза, т. е. повторяется. Такие операторы и команды называют телом цикла.

В языке Object Pascal имеются три вида операторов цикла:

Каждый из этих видов циклов удобно применять в определенных случаях, хотя с помощью любого из них можно обходиться практически в любом случае.

В тело цикла допускается помещать оператор безусловного перехода goto. Кроме того, для досрочного прерывания выполнения цикла можно использовать специальную процедуру break. Вызов этой процедуры приводит к прекращению выполнения операторов тела цикла и переходу к выполнению операторов, расположенных сразу за циклом. Вы можете досрочно завершить выполнение данного повторения цикла при помощи вызова процедуры continue. Ее вызов приводит к передаче управления сразу в конец цикла, т. е. досрочному завершению данного повторения.

Операторы циклов допускают множественные вложения друг в друга. При вложении сначала выполняются внутренние операторы цикла, а затем — внешние. Далее мы приведем примеры вложений операторов цикла друг в друга.

Цикл с параметром

Цикл с параметром применяется в том случае, когда заранее известно, сколько раз он должен выполниться. Данный цикл выглядит следующим образом:

For параметр:=нач.значение to кон.значение do оператор;

или

For параметр:=нач.значение downto кон.значение do оператор;

Параметр цикла — это переменная порядкового типа, которая объявлена в разделе объявления переменных.

Начальное значение — это значение, которое принимает параметр цикла. Естественно, что данное значение должно быть того же типа, что и переменная параметра цикла.

Конечное значение — это значение, которое может принимать параметр цикла.

Оператор — это одиночный или составной оператор, который и представляет собой тело цикла.

Внимание
Тело цикла не должно изменять параметр цикла, т. к. это может привести к непредсказуемым последствиям. В частности, к бесконечному циклу (зацикливанию программы).

И первый и второй варианты написания цикла изменяют параметр цикла на единицу. В первом случае (for ... to) происходит увеличение параметра на единицу при каждом проходе цикла, во втором случае (for ... downto) — уменьшение параметра цикла на единицу.

Итак, цикл с параметром выполняется несколько раз, постепенно увеличивая или уменьшая значение параметра: до тех пор, пока это значение не достигнет конечного значения.

Примечание
Цикл не выполняется ни разу, если для первого варианта цикла начальное значение параметра больше конечного, а для второго варианта — конечное значение больше начального.

Приведем несколько примеров циклов с параметрами (листинг 3.6).

Листинг 3.6. Примеры циклов с параметрами

for i:=l to 20 do // Начало цикла
begin // Начало составного оператора
s:=s+i; // Тело цикла
a:=a*i;
end; // Конец цикла. Значение i увеличивается на 1 for i:=l to 10 do // Начало внешнего цикла begin // Начало составного оператора
for j:=10 downto 1 do // Начало внутреннего цикла begin
s:=s+j; // Тело внутреннего цикла а:=s+а;
end; // Конец внутреннего цикла. i уменьшается на 1
a:=a*s; end; // Конец внешнего цикла. i увеличивается на 1

Цикл с предусловием

Цикл с предусловием применяется в том случае, если число повторений заранее неизвестно и если при некоторых условиях тело цикла может не выполняться совсем. Данный цикл выглядит следующим образом:

while условие do оператор;

Условие представляет собой логическое выражение, которое может быть ложным или истинным.

Оператор — это тело цикла. Он может быть простым или составным.

Данный Цикл выполняется в том случае, когда условие имеет значение True. Как только условие примет значение False, цикл выполняться не будет.

Переменные, входящие в условие цикла, могут быть произвольными (не обязательно порядковыми).

Пример оператора цикла с предусловием представлен ниже (листинг 3.7).

Листинг 3.7, Пример цикла с предусловием

while I > 0 do  // Начало цикла
begin // Начало составного оператора
S : = S+I; // Тело цикла
I := I - 1; // Изменяем переменную i самостоятельно
end; // Конец цикла. Переменная i не изменяется

Примечание

В отличие от цикла с параметром, при использовании других видов циклов следите за тем, чтобы условие цикла когда-нибудь изменилось. Для этого нужно изменять переменные, входящие в условие цикла в теле цикла.

Данный цикл не выполняется совсем, если при первоначальной проверке условия оно имеет значение False.

Цикл с постусловием

Цикл с постусловием используется в случае, когда желательно, чтобы тело цикла выполнилось хотя бы один раз, а общее количество повторений цикла заранее неизвестно.

Данный цикл имеет следующий вид:

repeat
оператор1;
...
операторN; until условие;

Операторы, расположенные между словами repeat и until, представляют собой тело цикла. Условие — это логическое выражение.

Операторы цикла выполняются, по крайней мере, один раз, а затем происходит проверка истинности условия. Если условие является ложным (False), то операторы цикла выполняются повторно. Цикл будет выполняться до тех пор, пока условие цикла не станет истинным (True).

Рассмотрим пример применения цикла с постусловием (листинг 3.8).

Листинг 3.8. Пример цикла с постусловием

repeat // Начало  цикла
К : = I mod J; // Тело цикла I : = J;
J : = К; until J = 0; // Условие цикла
Hosted by uCoz