Выбор действия в зависимости от выполнения условия может быть реализован при помощи инструкций IF и CASE.
Оператор IF реализует алгоритмическую конструкцию РАЗВИЛКА и изменяет порядок выполнения операторов в зависимости от истинности или ложности некоторого условия. Существует два варианта оператора:
else B ; { полная развилка }
и
If S then A ; { укороченная развилка }.
В этих операторах:
S ¾ некоторое логическое выражение, истинность которого проверяется;
A¾ оператор, который выполняется, если выражение S истинно;
B ¾ оператор, который выполняется, если выражениеS ложно.
Так как условный оператор IFявляется единым предложением, ни перед then, ни перед else точку с запятой ставить нельзя.
Пример 1:
Вычислить значение функции y, заданной выражением
Блок-схема решения данного примера представлена на рис. 11.
Рис.11. Блок-схема примера 1.
Программа (полная развилка):
Program Example_1 ;
Var
x, y : Real ;
Begin
Write (‘ Введите число x’) ;
ReadLn (x) ;
If x > 0 then y := ln(x)
else
If x = 0 then y := 1
else y := exp(x) ;
WriteLn(‘ Значение y=‘, y)
End.
Программа (укороченная развилка):
Program Example_1 ;
Var x, y : Real ;
Label 1, 2 ,3 ;
Begin
Write(‘ Введите число x’) ;
ReadLn (x) ;
If ( x > 0 ) then Go to 1 ;
If ( x = 0 ) then Go to 2 ;
y := exp(x) ;
Go to 3;
1: y := ln(x) ;
Go to 3;
2: y := 1 ;
3: WriteLn(‘ Значение y=‘, y)
End.
С помощью этого оператора можно выбрать вариант из любого количества вариантов. Структура этого оператора в Turbo Pascal:
C1: Instruction_1 ;
C2: Instruction_2 ;
CN: Instruction_N ;
В этой структуре:
S ¾ выражение порядкового типа, значение которого вычисляется:
C1, C2, . . . , CN ¾ константы, с которыми сравнивается значение выражения S;
Instruction_1, Instruction_2, Instruction_N ¾ операторы, из которых выполняется тот, с константой которого совпадает значение выражения S;
Instruction ¾ оператор, который выполняется, если значение выражения Sне совпадает ни с одной из констант C1, C2, . . . , CN.
Ветвь оператора else является необязательной. Если она отсутствует и значение выражения S не совпадает ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора IF перед словом else точку с запятой можно ставить.
Если для нескольких констант нужно выполнить один и тот же оператор, их можно перечислить через запятую (или даже указать диапазон, если возможно) сопроводив их одним оператором.
Пример 2.
Program Example_2 ;
Var i : Integer ;
Begin
ReadLn( i ) ;
Case i of
0, 2, 4, 6, 8 : WriteLn(‘Четная цифра ‘) ;
1, 3, 5, 7, 9 : WriteLn(‘Нечетная цифра ‘) ;
10 .. 100 : WriteLn(‘Число от 10 до 100 ‘) ;
else
WriteLn(‘Отрицательное число или больше 100 ‘)
end
end.
При решении многих задач некоторую последовательность действий приходится выполнять несколько раз. Такие повторяющиеся действия называются циклами и реализуются в программе с использованием инструкций циклов. В языке Паскаль циклические вычисления реализуются при помощи операторов FOR, WHILEи REPEAT.
Оператор цикла FOR организует выполнение одного оператора заранее известное число раз.
Существует два варианта оператора:
For I := I1 to I2 do Instruction ;
For I := I1 downto I2 do Instruction ;
В этих операторах:
I ¾ параметр цикла, являющийся переменной порядкового типа;
I1 ¾ выражение, определяющее начальное значение параметра цикла;
I2 ¾ выражение, определяющее конечное значение параметра цикла;
Instruction ¾ выполняемый оператор.
I1 иI2 ¾ должны быть совместимы для присваивания с параметром цикла.
Алгоритм, соответствующий инструкции FOR для первого варианта оператора представлен на рис. 12а, для второго варианта ¾ на рис. 12б.
Цикл действует таким образом. Сначала вычисляются и запоминаются начальное I1 и конечное I2 значения параметра цикла. Далее параметру цикла I присваивается начальное значение I1. Затем значение параметра цикла сравнивается со значением I2. Далее, пока параметр цикла меньше или равен конечному значению (в первом варианте) или больше или равен, конечному значению (во втором варианте), выполняется очередная итерация цикла; в противном случае происходит выход из цикла. Выполнение очередной итерации включает в себя сначала выполнение оператора Instruction, а затем присваивание параметру цикла следующего большего значения (в первом варианте оператора) или следующего меньшего значения (во втором варианте).
Естественно, если в первом варианте значение I1 больше I2 или во втором варианте меньше I2, оператор не выполняется ни разу.
После выхода из цикла параметр цикла становится неопределенным, за исключением случая, когда выход из цикла был осуществлен с помощью оператора GOTO или стандартной процедуры BREAK.