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

Условные операторы обеспечивают выполнение или невыполнение некоторого оператора, группы операторов или блока в зависимости от заданных условий. Pascal допускает использование двух условных операторов: if и case.

Оператор условия if является одним из самых популярных

средств, изменяющих естественный порядок выполнения операторов

программы. Он может принимать одну из следующих форм:

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

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

Здесь ключевые слова if, then, else означают соответственно "если", "то", "иначе".

Условие - это выражение булевского типа. Оно может быть простым или сложным. Сложные условия образуются с помощью логических операций and, or, not. При записи условий могут использоваться все возможные операции отношения. Результат выражения всегда имеет булевский тип.

В первом случае, если значение выражения истинно, выполняется < оператор1 >, если ложно - < оператор2 >.

Пример:

A:=2; B:=8;

if A>B then writeln ('A больше B')

else writeln ('A меньше или равно B');

В данном примере значение выражения A>B ложно, следовательно, на экране появится сообщение 'A меньше или равно B'.

Во втором варианте формата, если результат выражения True, выполняется < оператор >, если false - оператор, следующий сразу за оператором if.

Пример:

A:=2; B:=8; C:=0; if A>B then C:=A+B; C:=C+12; writeln ('C=',C:2);

В результате на экране появится сообщение С=12, так как выражение A>B ложно и наращивания C:=A+B не произойдет.

Один оператор if может входить в состав другого оператора if. В таком случае говорят о вложенности операторов:

if < условие > then

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

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

При вложенности операторов каждое else соответствует тому then, которое непосредственно ему предшествует.

Пример:

if A<20 then

if A>=15 then writeln ('A в диапазоне 15-20')

else writeln ('A в диапазоне 10-14');

Конструкций со степенью вложенности более 2-3 лучше избегать из-за сложности их анализа при отладке программ.

Ниже приведены типичные формы использования оператора if.

С простым оператором:

if A>B then D:=A+B else D:=A-B;

С составным оператором:

if A<B then begin

writeln ('A меньше B');

D:=A*B

end

else begin

writeln ('A больше или равно B');

D:=A/B

end;

С использованием сложного условия:

if (A=B) and (C=D) then

begin

writeln ('Норма');

F:=0

end

else

begin

writeln ('Превышение нормы!');

F:=100

end;

Оператор выбора caseявляется обобщение оператора if и позволяет сделать выбор из произвольного числа имеющихся вариантов. Он состоит из выражения, называемого селектором, и списка параметров, каждому из которых предшествует список констант выбора (список может состоять и из одной константы). Как и в операторе if, здесь может присутствовать слово else, имеющее тот же смысл.

Формат:

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

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

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

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

else < оператор >

end;

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

Селектор интервального типа:

case I of

1..10: writeln ('число',I:4' в диапазоне 1-10');

11..20: writeln ('число',I:4' в диапазоне 11-20');

21..30: writeln ('число',I:4' в диапазоне 21-30'); else writeln ('число',I:4' вне пределов контроля')

end;

 

Селектор целочисленного типа:

case I of

1: Z:=I+10;

2: Z:=I+100;

3: Z:=I+1000 end;

 

Селектор перечисляемого типа:

Var

season:(Winter, Spring, Summer, Autumn);

begin

...

case season of

Winter: writeln('Winter');

Spring: writeln('Spring');

Summer: writeln('Summer');

Autumn: writeln('Autumn')

end;

 

Аналогичным способом можно организовать ввод и вывод данных перечисляемого типа пользователя и обойти соответствующие ограничения языка Pascal.

Селектор может иметь и литерный тип. Его использование рассмотрим на примере следующей программы:

 

Program DemoCharCase;

{программа сообщает меню: список трех встроенных }

{ функций. По первой букве имени функции на экран}

{ выводится полное название этой функции}

{ V - признак выхода из программы}

Var Name:Char;

begin

While True do begin

writeln(' Введите имя функции: A-Abs, S-sin, C-cos, V-выход');

readln(Name);

case name of

'A','a': writeln('Вычисление абсолютной величины');

'S','s': writeln('"Вычисление синуса угла');

'C','c': writeln('Вычисление косинуса угла');

'V','v': begin

writeln('Программа работу закончила');

halt

end

else writeln('Указанного имени нет в меню')

end

end

end.