8. Операторы языка
Оператор является неделимым элементом программы, который дает возможность выполнять определенные алгоритмические действия. Отличием оператора, по отношению к другим элементам, является то, что под ним всегда подразумевается какое-то действие. В языке Паскаль операторы состоят из служебных слов. Операторы, используемые в программе, отделяются между собой и от других элементов программы символом ; . Все операторы языка Паскаль можно условно разбить на две группы:
Простые операторы – это операторы, не содержащие в себе других операторов. К ним относятся:
Структурированные операторы – это операторы, которые содержат в себе другие операторы. К ним относятся:
Оператор присваивания
С помощью этого оператора переменной или функции присваивается значение выражения. Для этого используется знак присваивания := , слева от которого записывается имя переменной, которой присваивается значение, а справа – выражение, значение которого вычисляется перед присваиванием. Пример:
X := Y; Z := А + В; Res := (I>0) and (I < 100); I := Sqr(J) + I * К;
Оператор безусловного перехода
Goto – зарезервированное слово в языке Паскаль. [метка] – это произвольный идентификатор, который позволяет пометить некий оператор программы и в дальнейшем сослаться на него. Метка располагается перед помеченным оператором и отделяется от него двоеточием : . Один оператор можно помечать несколькими метками. Они так же отделяются друг от друга : . Перед тем как использовать метку в разделе оператора ее необходимо описать в разделе label (раздел описания). Пример:
procedure MyProc; label Lbl1, Lbl2, met1; … begin … Lbl1: … goto met1; Lbl2: … goto Lbl1; Met1: … end;
Действие goto передает управление соответствующему помеченному оператору. При использовании меток нужно руководствоваться следующими правилом: метка должна быть описана в разделе описаний и все метки должны быть использованы. Оператор goto противоречит принципам технологии структурного программирования. Современные языки программирования не имеют в своем составе такого оператора, и в его использовании нет необходимости. Использовать оператор goto следует крайне осторожно. Широкое его применение без особых на то оснований ухудшает понимание логики работы программы. Безусловный переход можно осуществлять далеко не из каждого места программы и не в любое место программы. Так, нельзя с помощью этого оператора перейти из основной программы в подпрограмму или выйти из подпрограммы, не рекомендуется осуществлять переход внутрь структурированного оператора, т. к. он может дать неправильный результат, и т. д.
Пустой оператор
Пустой оператор не выполняет никакого действия и никак не отображается в программе (за исключением, быть может, метки или точек с запятыми, отделяющих пустой оператор от предыдущих или последующих операторов). Он может потребоваться для осуществления на него безусловного перехода.
Составной оператор
Составной оператор – это последовательность произвольных операций в программе, заключенная в так называемые операторные скобки Begin-End . Синтаксис:
begin [оператор1]; [оператор2]; … [операторN]; end;
Он может потребоваться в тех случаях, когда в соответствии с правилами построения конструкций языка можно использовать один оператор, а выполнить нужно несколько действий. В такой составной оператор входит ряд операторов выполняющих требуемые действия.
В дальнейшем везде, где будет указываться, что можно использовать один оператор, им может быть и составной оператор.
Отдельные операторы внутри составного оператора отделяются друг от друга точкой с запятой.
Условный оператор IF
Условный оператор IF позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор — это средство ветвления вычислительного процесса. Структура условного оператора имеет следующий вид:
if [условие] then [оператор1] else [оператор2];
где if, then, else — зарезервированные слова (если, то, иначе);
Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение [условие]. Если результат есть True (истина), то выполняется [оператор1], а [оператор2] пропускается; если результат есть False (ложь), наоборот, [оператор1] пропускается, а выполняется [оператор2]. Например:
var X, Y, Max: Integer; begin if X > Max then Y := Max else Y := X; … end;
При выполнении этого фрагмента переменная Y получит значение переменной X, если только это значение не превышает Mах, в противном случае Y станет равно Mах.
Обратите внимание, что перед else не должно быть точки с запятой.
Условными называются выражения, имеющие одно из двух возможных значений: истина или ложь. Такие выражения чаще всего получаются при сравнении переменных с помощью операций отношения =, <>, >, >=,
В отличие от других языков программирования в Object Pascal приоритет операций отношения меньше, чем у логических операций, поэтому отдельные составные части сложного логического выражения заключаются в скобки.
Например, такая запись предыдущего оператора будет неверной:
С учетом приоритета операций компилятор будет транслировать такую строку как:
Часть else [оператор2] условного оператора может быть опущена. Тогда при значении True условного выражения выполняется [оператор1], в противном случае этот оператор пропускается:
var X, Y, Max: Integer; begin if X > Мах then Мах := X; Y := X; end;
В этом примере переменная Y всегда будет иметь значение переменной X, а в Mах запоминается максимальное значение X. Вслед за else может идти другой оператор if. Таким образом, можно составить множественное ветвление:
if [условие1] then … else if [условие2] then … else if [условие3] then … else …
Оператор выбора CASE
Оператор реализует множественное ветвление. В определенных ситуациях case использовать удобнее, чем if. Синтаксис оператора:
case [выражение] of [выражение_1]:[оператор_1]; [выражение_2]:[оператор_2]; … [выражение_N]:[оператор_N]; else [оператор]; end;
Выполнение операторов зависит, будет ли [выражение] равно [выражение_1], [выражение_2] или [выражение_N]. Например, [оператор_2] будет выполнен только в случае, когда [выражение]=[выражение_2]. Если ни одно из условий не выполняется, то будет выполнен [оператор], следующий за блоком else. Если блока else нет, то оператор case просто пропускается. Оператор case эквивалентен следующему оператору if:
if [выражение]=[выражение_1] then [оператор_1] else if [выражение]=[выражение_2] then [оператор_2] … else if [выражение]=[выражение_N] then [оператор_N] else [оператор]
Операторы цикла
Циклической алгоритмической структурой считается такая структура, в которой некоторые действия выполняются несколько раз. В программировании имеются два вида циклических структур: цикл с параметром и итерационный цикл.
В цикле с параметром всегда имеются так называемые параметры цикла. Иногда цикл с параметром называют регулярным циклом. Характерной чертой является то, что число циклов и повторений можно определить до выполнения цикла.
В итерационном цикле невозможно определить число циклов до его выполнения. Он выполняется до тех пор, пока выполняется условие продолжение цикла.
В языке Паскаль имеются три оператора, реализующих циклические вычислительные структуры:
счетный оператор for. Он предназначен для реализации цикла с параметром и не может быть использован для реализации итерационного цикла;
Последние два ориентированы на реализацию итерационного цикла, однако их можно использовать и для реализации цикла с параметром.
Оператор FOR
for [параметр] := [начальное значение] to [конечное значение] do [оператор]
Начальное и конечное значения должны быть того же типа, что и параметр.
На первом шаге параметр цикла принимает начальное значение затем осуществляется проверка: параметр цикла меньше или равен конечному значению. Это условие является условием продолжения цикла. Если выполнено, то цикл продолжает свою работу и выполняется [оператор], после чего параметр цикла увеличивается (уменьшается) на единицу. Затем с новым значением параметр цикла, проверяется условие продолжения цикла. Если оно выполняется, то действия повторяются. Если условие не выполняется, то цикл прекращает свою работу.
Оператор for существенно отличается от аналогичных операторов в других языках программирования. Отличия следующие:
Оператор может не выполниться ни разу, поскольку проверка условия продолжения цикла выполняется до тела цикла;
Тело цикла в операторе for представлено одним оператором. В том случае, если действие тела цикла требует более одного простого оператора, то эти операторы необходимо превратить в один составной оператор посредством операторных скобок (BEGIN-END);
Цикл for может уменьшать параметр. В этом случае синтаксис следующий:
for [параметр] := [конечное значение] downto [начальное значение] do [оператор]
Оператор WHILE (цикл с предусловием)
while [условие] do [оператор]
Оператор while работает следующим образом: вначале работы проверяется результат логического условия. Если результат истина, то выполняется оператор, после которого осуществляется возврат на проверку условия с новым значением параметров в логическом выражении условия. Если результат ложь, то осуществляется завершение цикла.
При работе с while надо обратить внимание на его свойства:
цикл while может не выполняться ни разу, поскольку проверка условия в продолжение цикла выполняется до тела цикла.
В примере ниже выполняется обработка записей формы. Пока не достигнуто окончание набора данных формы, выполнять обработку:
while Self.EOF = False do begin … Self.MoveNext; end;
Оператор REPEAT (цикл с постусловием)
repeat [тело цикла]; until [условие];
Оператор repeat работает следующим образом: сначала выполняются операторы тела цикла, после чего результат проверяется логического условия. Если результат ложь, то осуществляется возврат к выполнению операторов очередного тела цикла. Если результат истина, то оператор завершает работу.
Оператор repeat имеет следующие особенности:
операторы тела цикла не надо заключать в операторские скобки (BEGIN-END), при этом роль операторных скобок выполняют repeat и until.
Прерывание цикла
Любой из циклов можно прервать оператором break.
while [условие] do begin … if [условие выхода из цикла] then Break; … end;