Структура ветвления. Условный оператор. Программирование. Условные операторы Pascal-Паскаль Оператор условия if в языке программирования паскаль

Мой компьютер

Продолжаем изучать язык программирования Паскаль. Рассмотрим первую алгоритмическую конструкцию, которая изучается при изучении языка — условие (ветвление) . Статья предназначения для начинающих программистов, а также для учителей информатики. Задачи в конце статьи помогут закрепить знания и проверить себя.

Алгоритмическая конструкция УСЛОВИЕ используется в тех случаях, когда перед нами стоит выбор: сделать так или иначе.

Условие бывает:

  1. Неполное
  2. Полное

Неполное условие

Блок-схема неполного условия выглядит следующим образом:

Неполное условие

ЕСЛИ УСЛОВИЕ ИСТИННО, ТО ВЫПОЛНЯЕТСЯ ДЕЙСТВИЕ , ИНАЧЕ НИЧЕГО НЕ ПРОИСХОДИТ

На языке Паскаль данная алгоритмическая конструкция выглядит следующим образом:

IF условие THEN действие;

Если условие, стоящее после IF истинно THEN.

Что такое условие?

Условие — это выражение, которое может быть либо истинным, либо ложным. Условие обязательно содержит логические операторы <, >, =, <=, >=, <> (не равно) .

Например:

if a=7 then writeln("Привет!"); end.

Если введенное значение переменной a равно 7 , то на экране мы увидим слово Привет! Если не равно — то на экран ничего выводится не будет.

Рассмотрим другой пример:

var a:integer; begin readln(a); if a=7 then writeln("Привет!"); writeln("До встречи"); end.

Что мы увидим на экране, введя число 7? Увидим:

Привет!
До встречи

Что мы увидим на экране, введя число 10?

До встречи

Почему так? Почему До встречи выводится на экран в любом случае? Команда

writeln("До встречи");

не относится к конструкции If-Then

var a:integer; begin readln(a); if a=7 then writeln("Привет!"); writeln("До встречи"); // условие подсвечено голубым цветом end.

Как сделать так, чтобы оба действия относились к конструкции If-Then?

Необходимо заключить эти действия в так называемые операторные скобки : begin… end;

var a:integer; begin readln(a);

if a=7 then begin writeln("Привет!");

Writeln("До встречи");
end;

end.
Теперь, если мы введем число 10, то на экране ничего не увидим.

Составное (сложное) условие

Иногда приходится использовать сложное условие. Для его составления используются логические союзы: and или or.

  • Если мы используем and, то составное условие будет истинно, когда все простые условия истинны.
  • Если мы используем or, то составное условие будет истинно, когда хотя бы одно простое условие будет истинно.

Например:

a>7 и a<15 на языке паскаль будет записываться

(a>7) and (a<15)

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

(a=7) or (a>15)

Составное условие будет истинно, если: либо a=7 , либо a>17.

Задача:

Используя конструкцию If-Then, найти максимальное среди трех введенных чисел.

Решение

var a, b, c:integer; begin readln(a); readln(b); readln(c); if (a>b) and (a>c) then writeln("число ", a, " максимальное"); if (b>a) and (b>c) then writeln("число ", b, " максимальное"); if (c>a) and (c>b) then writeln("число ", c, " максимальное"); end.

Полное условие

Блок-схема полного условия выглядит так:

IF условие THEN действие_1 ELSE действие_2;

  • Если условие истинно , то выполняется действие, стоящее после слова Then .
  • Если условие ложно , то выполняется действие, стоящее после слова Else.

Если действий, которые выполняются, если условие истинно или ложно несколько — используются операторные скобки .

if условие then begin действие; действие; ............... end else begin действие; действие; ................ end ;

(перед else точка с запятой не ставится)

Задачи для самостоятельного выполнения:

  1. Сумма покупки составляет а рублей. Если а больше 1000 рублей, то предоставляется скидка 15%. Вывести на экран сумму покупки с учетом скидки либо сообщение о том, что скидка не предоставляется.
  2. Известны площади круга и квадрата. Определить:
    • уместится ли круг в квадрате
    • уместится ли квадрат в круге
  3. Определить, является ли число а делителем числа b
  4. Проверить, принадлежит ли число введенное с клавиатуры, интервалу (-5;3).
  5. Дано двузначное число. Определить:
    • входит ли в него цифра 3
    • входит ли в него цифра а
  6. Определить, является ли треугольник со сторонами a, b, c равнобедренным
  7. Даны три различных числа. Определить, какое из них (первое, второе или третье)
    • самое большое
    • самое маленькое
    • является средним

(список задач будет пополняться)

Условные операторы предназначены для выбора к исполнению одного из возможных действий (операторов) в зависимости от некоторого условия (при этом одно из действий может отсутствовать). В качестве условий выбора используется значение логического выражения. В Турбо Паскале имеются два ус­ловных оператора: if и case.

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

Оператор условия if может принимать одну из следующих форм:

if <условие> then <оператор1>

else <оператор2>;

if <условие> then <оператор>;

Оператор условия if выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисления получается значе­ние булевского типа. В первом случае, если значение выражения есть True (истина), выполняется <оператор1>, указанный после слова then. Если результат вычисления выражения в условии есть False (ложь), то выполняется <оператор2>. Во втором случае - если результат выражения Тгuе, выполняется <оператор>, если False - выполняется оператор, следующий сразу за оператором if. По правилам каждая из ветвей может содержать либо один выполняемый оператор, либо несколько, объединенных в составной оператор. Точка с запятой перед E lse не ставится.

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

Если один оператор if может обеспечить выбор из двух альтернатив, то оператор выбораcase позволяет сделать выбор из произволь­ного числа имеющихся вариантов.

case <выражение-селектор> of

<список1>: <оператор1>;

<список2>: <оператор2>;

<списокN>: <операторN>;

Оператор caseработает следующим образом. Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна текущему значению селектора, выполняется оператор, стоящий за словомelse. Если словоelseотсутствует, активизируется оператор, находящийся за словомend, т.е. первый оператор за границейcase.

Выражение-селектор - это простая переменная целого, символьного, перечисляемого или логического типов, в зависимости от значения которой принимается решение;

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

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

Ветвь Else не обязательна, и в отличие от оператора if, перед ней можно ставить точку с запятой.

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

Если в программе возникает необходимость неоднократно выполнить некоторые операторы, то используются операторы повтора (цикла). В языке Паскаль раз­личают три вида операторов цикла: while, repeat, for.

Оператор while

Оператор while (пока) называют оператором цикла с Предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

while <условие продолжения повторений> do

<тело цикла>;

Условие – логическое выражение. Тело цикла – простой или составной оператор. Составной оператор используется в тех случаях, когда тело цикла состоит из 2-х и более операторов.

Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен True, тело цикла выполняется и снова вычисляется выражение условия. Если результат равен False, происходит выход из цикла и пере­ход к первому оператору, стоящему сразу за телом цикла.

Оператор повтора repeat

Оператор repeatреализует цикл спостусловием . Цикл с постусловием всегда будет выполнен хотя бы один раз.

<оператор1>;

<оператор2>;

<оператор N >;

until <условие окончания цикла>;

Операторы, заключенные между словами repeat и until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Если результат логического выражения равен False, то тело цикла активизируется еще раз; если результат True, происходит выход из цикла.

Оператор повтора for

Это оператор с известным числом повторений. Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой параметром цикла , илиуправляющей переменной .

Оператор повтора for может быть представлен в двух форматах:

for <параметр цикла> := to do <тело цикла>;

for <параметр цикла> := downto do <тело цикла>;

где <параметр цикла> - это переменная целого, символьного, логического или перечисляемого типов;

SI и S2 - выражения, определяющие соответственно начальное и конечное значения параметра цикла;

for ... do - заголовок цикла;

Тело цикла может быть простым илисоставным оператором. Оператор for обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все зна­чения параметра цикла от начального до конечного.

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

Шаг изменения параметра цикла для оператора for…to…doравен +1, а для оператораfor…downto…doравен -1.

Вопросы для самопроверки:

    Формат оператора присваивания. Допустимо ли использование величин разных типов в арифметическом выражении?

    В чем заключается отличие оператора ввода Read от оператора Readln?

    Укажите форматы вывода данных.

    Какие виды ветвлений реализованы в Turbo Pascal?

    Для чего используются ветвления? Приведите примеры.

    Две формы записи условного оператора If.

    Формат записи вложенного оператора If.

    Формат записи оператора выбора Case?

    В каких случаях используется составной оператор Begin…end?

    Как в блок-схемах изображаются разветвленные алгоритмы?

    Что такое цикл?

    Какие виды циклов реализованы в Turbo Pascal?

    Что такое тело цикла?

    В каком случае тело цикла заключается в операторные скобки begin…end?

    В чем отличия операторов повтора while и repeat?

    В каких случаях предпочтительнее использовать для организации циклов оператор повтора for? Что записывается в заголовке этого оператора?

    Каким образом в операторе цикла for описывается направление изменения значения параметра цикла?

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

В языке Паскаль выбор действия, в зависимости от некоторого условия, может быть реализован с помощью конструкции

if ... then ... else ... if ... then ...

2. Какой вид имеет полная форма оператора условного перехода if в языке Паскаль?

Полная форма оператора условного перехода if :

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

Действие оператора состоит в следующем: сначала вычисляется значение выражения условие . Если оно истинное (равное TRUE ), то выполняется оператор, который следует за словом then (оператор1 ). Если значение ложное (FALSE ), то выполняется оператор, который следует за словом else (оператор2 ).

Операторы оператор1 и оператор2 могут быть составными, то есть содержать несколько строк кода. Такие операторы берутся в операторные скобки begin … end . Такая необходимость возникает, если после зарезервированных слов then или else нужно указать несколько операторов.

В этом случае общий вид оператора условного перехода может иметь, например, следующий вид:

if условие then begin // несколько операторов ... end else begin // несколько операторов ... end ;

3. Какой вид имеет сокращенная форма оператора условного перехода?

Сокращенная форма оператора условного перехода не содержит блока else и имеет вид:

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

В этом случае оператор работает следующим образом. Сначала вычисляется значение логического (булевого) выражения условие . Если результат логического выражения условие истинный (равный TRUE ), то выполняется оператор, который следует за словом then . Если результат равный FALSE , то выполняется оператор, который следует за оператором if (в операторе if…then ничего не выполняется).

Если при выполнении условия нужно выполнить несколько операторов, то общий вид оператора условного перехода может быть таким:

if условие then begin // два или больше оператора ... end ;

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

Пример 1. Фрагмент программы нахождения максимального значения между двумя вещественными числами.

var a,b:real; // a, b - переменные, для которых ищется максимум max:real; // максимум ... begin ... // a, b - задаются if a>b then max:=a else max:=b; ... end ;

Пример 2.

Фрагмент программного кода, решающего эту задачу:

... var x,f:real; begin ... // x - задается if -5 then f:= x*x+8 else f:= -x*x*x+2 ; // в переменной f - результат ... end ;

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

Пример 1. Фрагмент кода, который находит минимальное значение между двумя вещественными числами x и y .

... var min:real; ... begin ... // x, y - заданы min:= x; if minthen min:= y; ... end ;

Пример 2. Вычисление значения функции согласно условию. Пусть необходимо найти значение функции:

var x, f:real; begin ... // x - задано if x<-6 then f:=3 *x*x-x; if (-6 <=x) and (x<=5 ) then f:=sqrt(7 -x); if x>5 then f:=8 *x-3 ; ... end ;

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

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

Пример :

begin {обмен значений переменных X и Y }

Z:=X;

X:=Y;

Y:=Z;

end;

Условный оператор

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

Данный оператор выполняется следующим образом. Сначала вычисляется выражение, стоящее после служебного слова if . Результат вычисления должен иметь булевский тип. Если значение выражения есть true , то выполняется оператор, указанный после служебного слова then . Если результат вычисления выражения есть false , выполняется оператор, следующий за служебным словом else . Если при этом часть условного оператора, начиная со слова else , отсутствует, то управление немедленно передается оператору, следующему за условным.

Примеры условных операторов:

1) if X < Y then

Max:= Y

else

Max:= X

2) if All_Correct then

Transpose(A,B,N)

3) if Color = Red then

begin

X:= cos(Y);

Y:= alpha+beta;

Color:= Yellow

else begin

X:= Sin(Y);

Color:= Red

end;

При использовании вложенных условных операторов может возникнуть синтаксическая неоднозначность, иллюстрируемая следующей схемой:

if Expr1 then if Expr2 then Stmt1 else Stmt2

В приведенном операторе часть else Stmt 2 может трактоваться как принадлежащая или "внешнему" оператору if Expr 1 . . ., или вложенному оператору if Expr 2 then . . .. Эта двусмысленность разрешается путем следующей интерпретации данной конструкции:

if Expr1 then

begin

if Expr2 then

Stmt1

else

Stmt2

Иными словами, служебное слово else всегда ассоциируется с ближайшим по тексту служебным словом if , которое еще не связано со служебным словом else .

Следует проявлять аккуратность при записи вложенных друг в друга условных операторов.

Оператор варианта

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

сазе Color of

Red: X:= Y+2;

Yellow: X:= Y-2;

Green: X:= Y

В предположении, что Color является переменной перечислимого типа, данный оператор будет выполняться следующим образом.

Сначала вычисляется текущее значение переменной Color . Затем это значение сопоставляется (сравнивается) с константами, записанными перед операторами. При совпадении значения переменной с одной констант будет выполнен оператор, "помеченный" данной константой. На этом выполнение оператора варианта будет завершено. Если значение переменной Color не совпадает ни с одной константой, то данный оператор не выполняет никаких действий. Для того, чтобы задать некоторые действия для случая такого несовпадения, можно использовать альтернативу else , например:

сазе (K+l)*2 of

2: Add(А , В );

4: Multiply (А,В);

0: Substract(А , В )

else

Writeln(" Ошибка !")

Оператор, следующий за служебным словом else , будет выполнен в том случае, если значение выражения (К+1) *2 не совпадет ни с одной из констант 2,4,0.

Кроме одиночных констант в альтернативах оператора варианта могут быть заданы списки и/или диапазоны значений, которые в этом случае должны разделяться символом "," (запятая), например:

case Switch of

1. .2: Prod;

3,4,10..20: Proc2;

5, б : РгосЗ

else

Proc4

В последнем примере оператор процедуры Ргос2 будет выполнен в том случае, когда переменная Switch будет иметь одно из следующих значений: 3,4,10,11,12, . . ., 19,20.

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

1. Значение выражения–"переключателя", записанного после служебного слова сазе, должны принадлежать дискретному типу; для целого типа они должны лежать в диапазоне -32768. .32768.

2. Все константы, предшествующие операторам альтернатив, должны иметь тип, совместимый с типом выражения.

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

В заключение приведем синтаксическую диаграмму для оператора варианта.

Оператор варианта

Альтернатива

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

Оператор цикла с предусловием

Синтаксическая диаграмма для данного оператора выглядит следующим образом:

Этот структурный оператор задает повторяющееся выполнение оператора, содержащегося в нем. Перед каждым очередным выполнением внутреннего оператора производится проверка значения булевского выражения, которое

служит критерием повторения: если это выражение имеет значение true , то выполняется очередная итерация; в противном случае (значение выражения есть false ) выполнение оператора цикла заканчивается. Если выражение с самого начала имеет значение false , то цикл не выполнится ни разу.

Примерами оператора цикла с предусловием могут служить:

В последнем примере задан "бесконечный" цикл, так как выражение после служебного слова while тождественно равно true . Прекращение этого цикла может произойти, например, в результате перехода по метке вовне оператора цикла.

Этот оператор аналогичен предыдущему оператору (циклу с предусловием) и отличается от него, во-первых, тем, что условие проверяется ПОСЛЕ выполнения очередной итерации (таким образом, гарантируется хотя бы однократное выполнение цикла), а, во-вторых, тем, что критерием прекращения цикла является равенство выражения константе true ; если выражение есть false , то цикл повторяется.

Например, цикл вида

repeat

Procl(X,Y+i);

i:= i-1

until i = 0;

будет выполняться ДО ТЕХ ПОР, ПОКА i не станет равно нулю.

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

Оператор цикла с постусловием

Обратите внимание, что синтаксис while -цикла допускает в теле цикла только один оператор, в то время как repeat -цикл может содержать последовательность операторов.

Приведем еще два примера repeat -циклов.

repeat

К := I mod J;

I:= J;

J:= К ;

until J = 0;

repeat

Write ("Введите целое число; ") ;

Readln(i);

Process(i)

until (i < 0) and (i > 9);

Оператор цикла с параметром

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

а) диапазон изменения значений управляющей переменной и, одновременно, число повторений оператора, содержащегося в теле цикла;

б) направление изменения значения переменной (возрастание или убывание);

в) собственно действия, выполняемые на каждой итерации (оператор тела цикла).

Следующий простой пример иллюстрирует использование цикла с параметром.

for i:=1 to 10 do M[i]:=i*2

В данном примере задано десятикратное повторение оператора присваивания, причем управляющая переменная i последовательно принимает значения 1, 2, . . ., 9,10.

Диапазон значений управляющей переменной может задаваться выражениями, которые вычисляются ОДИН РАЗ перед выполнением цикла:

for j:=X+2 downto X-2 do

begin

M:=Func(A,B);

Proc(M,j)

В этом примере значение переменной j последовательно уменьшается от начального значения Х+2 до конечного значения х-2.

Оператор цикла с параметром

Диапазон

На использование управляющей переменной налагаются следующие ограничения:

1. В качестве управляющей переменной должна использоваться простая переменная, описанная в текущем блоке.

2. Управляющая переменная должна иметь дискретный тип.

3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной.

4. В теле цикла запрещается явное изменение значения управляющей переменной (например, оператором присваивания).

5. После завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора цикла не было прервано оператором перехода. (Однако практика работы с системой Turbo Pascal показывает, что на самом деле последнее использованное значение управляющей переменной сохраняется и при нормальном выходе из цикла).

Оператор, который содержится в теле оператора for , выполняется один раз для каждого значения в диапазоне между начальным и конечным значением. Управляющая переменная всегда инициализируется начальным значением. В случае использования служебного слова to значение управляющей переменной увеличивается при каждом повторении на единицу. Если начальное значение превышает конечное значение, то содержащийся в теле оператора for оператор не выполнятся. Когда в операторе цикла используется служебное слово downto , значение управляющей переменной уменьшается при каждом повторении на единицу. Если начальное значение в таком операторе меньше, чем конечное значение, то содержащийся в теле оператора цикла оператор не выполнится ни разу.

С учетом всего сказанного можно представить семантику данного оператора цикла следующим образом. Оператор

for V:= Expr1 to Expr2 do Body;

эквивалентен оператору:

begin

Temp1:= Expr1;

Temp2:= Expr2;

if Temp1 <= Temp2 then

begin

V:= Temp1;

Body ;

while V <> Temp2 do

begin

V:= Succ(V);

Body;

end;

end;

end;

Аналогично , оператор цикла for V:= Expr1 downto Exp2 do Body; эквивалентен оператору :

begin

Temp1:= Expr1;

Temp2:= Expr2,

if Temp1 >= Temp2 then

begin

V:= Temp1;

Body ;

while V <> Temp2 d о

begin

V:= Pred(V);

Body;

end;

end;

end ;

где Temp 1 и Temp 2 - вспомогательные переменные, тип которых совпадает с основным типом переменной V и которые не встречаются в другом месте программы.

Приведем примеры оператора цикла с параметром:

1) for I:= 2 to 63 do

if Data[I] > Max then Max:- Data[I]

2) for I:= 1 to 10 do

for J:= 1 to 10 do begin

X:= 0;

for К := 1 to 10 do

X:- X + Mat1*Mat2;

Mat := X;

end;

3) for Day:= Monday to Friday do

Calculate_Profit(Day);

Пустой оператор

Пустой оператор является в некотором смысле парадоксальной конструкцией, так как он, во-первых, не имеет "графического" начертания, а, во-вторых, не производит никаких действий. Необходимость введения такого понятия диктуется в первую очередь синтаксическими причинами. Например, пусть в программе необходимо передать управление на конец составного оператора. Это можно сделать с помощью оператора безусловного перехода по метке. Но по определению метка должна обязательно предшествовать некоторому оператору. Таким образом, строго говоря, невозможно передать управление на конец любой составной конструкции. Однако если считать, что метка в данном случае предшествует пустому оператору, то решение указанной проблемы может выглядеть следующим образом:

begin

goto Out;

Out :

Рассмотрим еще один практически полезный случай использования понятия пустого оператора. Синтаксис языка Pascal определяет символ ";" (точка с запятой) как разделитель операторов. Таким образом, последний оператор, например, в составном операторе не должен завершаться этим символом, так как после него не следует оператор, а идет служебное слово end :

begin

S1; S2; ...; SN

Однако если предположить, что между последним оператором SN и служебным словом end расположен пустой оператор, то становится допустимой такая форма записи:

begin

S1; S2; ...; SN;

что в ряде случаев более предпочтительно.

Пустой оператор удобно использовать и в тех случаях, когда по той или иной причине необходимо организовать

некоторый составной оператор, не содержащий в себе ни одного оператора, например:

repeat until KeyPressed;

Здесь тело цикла не содержит ни одного оператора, чего синтаксис языка не позволяет. В этом случае считается, что цикл содержит один пустой оператор. Приведенный пример удобно использовать для организации задержки выполнения программы в ожидании нажатия любой клавиши (функция KeyPressed -стандартная функция языка Turbo Pascal - возвращает значение true при нажатии произвольной клавиши и false в противном случае).

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

1) begin S1;;;;;S2; end

2) if Cond then begin end

else while true do;

3) if Cond then ;

где S 1, S 2 - операторы, Cond - некоторое выражение булевского типа.