Структурированные операторы
3.1. Оператор выбора CASE
Синтаксис
CASE <Выражение> OF
<Список значений 1>:<Оператор 1>;
<Список значений 2>:<Оператор 2>;
∙ ∙ ∙
<Список значений N-1>:<Оператор N-1>;
<Список значений N>:<Оператор N>
[ELSE
<Список операторов>]
END
Выражение может быть только порядкового типа. В списках значений через запятую указываются константы или интервалы значений. Если значение выражения находится в одном из списков значений, выполняется соответствующий оператор. Одно и то же значение не может находиться в нескольких списках (если рассматривать Delphi, так как в других версиях языка Паскаль это иногда допускается, при этом выполняется только первый из операторов, для которого значение – в списке). Если значение выражения не содержится ни в одном из списков и присутствует раздел ELSE, то выполняется список операторов. После последнего оператора перед ELSE и перед END точку с запятой ставить не обязательно, но допускается.
Пример
CASE S[n] OF
'0'..'9':WriteLn('Цифра');
'A'..'Z','a'..'z':WriteLn('Буква');
'+','-','*','/':WriteLn('Операция');
ELSE
WriteLn('Неизвестный символ');
END;
3.2. Оператор цикла FOR
Синтаксис
FOR <Имя переменной> := <Выражение 1> {TO | DOWNTO} <Выражение 2> DO <Оператор>
Алгоритм действия оператора FOR для фраз TO/DOWNTO
1. Вычислить начальное и конечное значения переменной цикла (выражения 1 и 2).
2. Присвоить переменной цикла начальное значение.
3. Если значение переменной не больше/меньше конечного значения, то
А. Выполнить оператор.
Б. Изменить значение переменной цикла на следующее/предыдущее.
В. Перейти к шагу 3.
4. Конец оператора.
Действия, выполняемые на шаге 3.Б (изменение значения переменной цикла на следующее или предыдущее), требуют, чтобы <Выражение 1>, <Выражение 2> и переменная цикла имели одинаковый порядковый тип, так как такие действия определены только для порядковых типов. Если использована фраза TO и начальное значение больше конечного, либо фраза DOWNTO и начальное значение меньше конечного, то оператор не будет выполнен ни разу. После выполнения цикла значение переменной цикла изменяется и не должно использоваться.
Пример
FOR n:=1 TO 10 DO
WriteLn('n=',n);
Результат выполнения
n=1
n=2
. . .
n=10
3.3. Оператор цикла WHILE
Синтаксис
WHILE <Логическое выражение> DO <Оператор>
Принцип действия оператора можно сформулировать так: пока значение логического выражения истинно, выполнять оператор. Т.е. сначала происходит вычисление значения логического выражения. Если оно истинно, то выполняется оператор, и все повторяется сначала до тех пор, пока выражение не станет ложным.
Если выражение окажется ложным с самого начала, оператор не выполнится ни разу.
Пример
n:=1;
WHILE n<=10 DO
BEGIN
WriteLn('n=',n);
Inc(n);
END;
Результат выполнения
n=1
n=2
. . .
n=10
Функции Inc и Dec определены для порядковых типов.
Синтаксис
Inc(<Порядковая переменная>[,<Целое число>])
Dec(<Порядковая переменная>[,<Целое число>])
Они выполняют соответственно увеличение и уменьшение значения переменной на 1 или на указанное число.
Пример
Inc(n); { Увеличение значения пременной n на 1 }
Dec(n,5); { Уменьшение n на 5 }
3.4. Оператор цикла REPEAT
Синтаксис
REPEAT
<Список операторов>
UNTIL <Логическое выражение>
Список операторов в цикле REPEAT имеет такую же структуру, как и в составном операторе BEGIN END.
Действие оператора: выполнять список операторов до тех пор, пока логическое выражение не станет истинным. Сначала происходит выполнение списка операторов, затем выселяется значение логического выражения. Если оно ложно, все повторяется сначала до тех пор, пока выражение не станет истинным.
В отличие от оператора WHILE, цикл REPEAT заканчивается, когда выражение становится истинным. Также, в отличие от оператора WHILE, здесь сначала выполняется список операторов, и только потом вычисляется значение логического выражения, поэтому независимо от того, каким будет логическое выражение, список операторов выполнится хотя бы один раз.
Пример
n:=1;
REPEAT
WriteLn('n=',n);
Inc(n);
UNTIL N>10
Результат выполнения
n=1
n=2
. . .
n=10
Лекция 4
Дата добавления: 2017-10-09; просмотров: 499;