- •1.2.5. Лексика, синтаксис и семантика языков программирования
- •2.1. Алфавит языка
- •2.2. Структура программы
- •2.3. Концепция типа для данных
- •2.4. Стандартные типы данных
- •2.5. Перечисляемые и ограниченные типы
- •2.6. Константы
- •2.7. Переменные
- •2.8. Инициализация переменных
- •3.1. Оператор присваивания
- •3.2. Операторы ввода и вывода
- •3.3. Выражения
- •3.4. Составной оператор
- •3.5. Условный оператор
- •3.6. Оператор варианта
- •3.7. Цикл с предусловием
- •3.8. Цикл с постусловием
- •3.9. Цикл с параметром
- •3.10. Операторы завершения цикла
- •3.11. Метки и операторы перехода
3.5. Условный оператор
Предназначен для выполнения тех или иных действий в зависимости от истинности или ложности некоторого условия. Синтаксис:
if <условие > then <оператор>;
if <условие> then <оператор1> else <оператор2>;
Условный оператор в короткой форме работает по правилу: если булевское выражение, записанное в условии, истинно, то выполняется оператор 1, далее выполняется оператор, следующий за условным. Если булевское выражение ложно, то будет выполняться оператор, следующий за этим условным оператором.
В выражении должен получаться результат, имеющий стандартный булевский тип. Если результатом выражения является истинное значение (true), то выполняется оператор, следующий за ключевым словом then. Если результатом выражения является значение false и присутствует ключевое слово else, то выполнятся оператор, следующий за ключевым словом else. Если ключевое слово else отсутствует, то никакой оператор не выполняется.
В общем случае ключевое слово else связывается с ближайшим ключевым словом if, которое еще не связано с ключевым словом else.
Примеры использования оператора if:
if X < 1.5 then Z := X+Y else Z := 1.5;
if P1 <> nil then P1 := P1^.father;
Операторы могут быть простыми или составными. При вложенных конструкциях if компилятор считает, что else относится к последней из конструкций if, в которой не было раздела else.
Синтаксическая неоднозначность, возникающая в конструкции:
if e1 then if e2 else e3
разрешается путем следующей интерпретации этой конструкции:
if e1 then begin
if e2 then s1 else s2
end
3.6. Оператор варианта
Оператор варианта (casе) состоит из выражения (переключателя) и списка операторов, каждому из которых предшествует одна или более констант (они называются константами выбора) или ключевое слово else. Переключатель (селектор) должен иметь порядковый тип (размером в байт или слово). Таким образом, строковый тип и длинный целый тип являются недопустимыми типами переключателя. Все константы выбора должны быть уникальными и иметь порядковый тип, совместимый с типом переключателя. В общем виде оператор case записывается следующим образом:
case выражение of
список значений 1: оператор1;
список значений 2: оператор2;
…
список значений n: операторn;
else
оператор;
end;
Оператор варианта case приводит к выполнению оператора, которому предшествует константа выбора, равная значению переключателя или диапазону выбора, в котором находится значение переключателя. Если такой константы выбора или такого диапазона выбора не существует и присутствует ветвь else, то выполнится оператор, следующий за ключевым словом else. Если же ветвь else отсутствует, то никакой оператор не выполняется. Примеры оператора варианта:
case Operator of
plus: X := X+Y;
minus:X := X–Y;
times:X := X*Y;
end;
case I of
0, 2, 4, 6, 8: Writeln('Четная цифра');
1, 3, 5, 7, 9: Writeln('Нечетная цифра');
10..100: Writeln('Между 10 и 100');
end;
3.7. Цикл с предусловием
Структура while do используется для организации циклического выполнения оператора, пока выполняется некоторое условие. Синтаксис:
while <условие> do <оператор>;
Сначала вычисляется <условие>, которое должно возвращать значение булева типа. Если условие выполняется, то выполняется тело цикла, после чего опять вычисляется выражение, определяющее условие. Цикл выполняется до тех пор, пока условие не перестанет выполняться. После этого управление передается следующему за структурой while do оператору.
Так как проверка условия осуществляется перед выполнением тело цикла, то если условие сразу ложно, оператор не будет выполнен ни одного раза.
Этот оператор можно использовать для организации поиска среди множества объектов объекта, обладающего определенными свойствами. При это не исключается, что множество объектов может быть пустым.
<Оператор> может быть простым или составным. Он выполняется повторно до тех пор, пока выражение принимает значение truе.
Если выражение с самого начала принимает значение false, то оператор, содержащийся внутри оператора цикла с предусловием, не выполняется. Примерами операторов цикла с предусловием могут служить следующие операторы:
while I > 0 do begin
if Odd(I) then Z := Z * X;
I := I div 2;
X := Sqr(X);
end;
while not Eof(InFile) do begin
Readln(InFile,Line);
Process(Line);
end;
while Data[I] <> X do I := I + 1;