ОПЕРАТОРЫ ВЕТВЛЕНИЯ.

Вычислительный процесс наз. разветвляющимся, если в зависимости от выполнения определенных условий он реализуется по одному из нескольких, заранее предусмотренных возможных направлений. Каждое отдельное направление наз. ветвью вычислений. Для программной реализации таких вычислений в языке Pascal имеются специальные операторы передачи управления, которые дают возможность перейти из одного места программы в другое (передать управление) и изменить последовательный порядок выполнения ее операторов.

УСЛОВНЫЙ ОПЕРАТОР IF

Данный оператор имеет две формы записи - полную и краткую.

Полная форма записи имеет вид:

IF <логическое выражение> THEN <оператор 1>

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

(<оператор 1>, <оператор 2> представляют собой простые или составные операторы).

Если логическое выражение принимает значение TRUE, то выполняется <оператор 1>, иначе (если логическое выражение принимает значение FALSE) выполняется <оператор 2>. Условный оператор относится к сложным операторам, так как в его состав входят другие операторы.

Одна из ветвей может отсутствовать. Операторы, входящие в состав условного оператора, могут быть простыми или составными. Составной оператор (блок) обрамляется ключевыми словами begin и end. Блок применяют в том случае, когда по какой-либо ветви требуется выполнить несколько операторов: ведь иначе компилятор не сможет понять, где заканчивается ветвь и начинается следующая часть программы.

 


СТРУКТУРНАЯ СХЕМА УСЛОВНОГО ОПЕРАТОРА

 

Пример 1.

Составить программу вычисления значения функции:

Решение:

PROGRAM pr1;

VAR y, a, b, m, c: real;

k: integer;

BEGIN

readln(a,b,m,c,k);

if k=0 then y:=exp(m+c)

else if k=1 then y:=ln(a/b)

else y:=sqrt(abs(sqr(a+b)+c));

writeln(‘y=’, y:8:2)

END.

Краткая форма записи условного оператора не имеет конструкции ELSE.

IF <логический оператор> THEN <оператор>;

Если логическое выражение принимает значение TRUE, то выполняется <оператор>. В противном случае (т.е. логическое выражение принимает значение FALSE) выполняется оператор следующий за оператором IF.

Пример 2.

Составить программу вычисления функции

Решение:

PROGRAM pr2;

VAR x,y:real;

BEGIN

writeln(‘ввести данные:’);

readln(x);

y:=0;

if x>0 then y:=sqr(x);

writeln(‘y=’,y:8:2,’ при x=’,x:5:2)

END.

Пример 3.

Вычислить корни квадратного уравнения общего вида

в области действительных чисел.

Решение:

PROGRAM pr3;

VAR a,b,c,x1,x2,d:real;

BEGIN

writeln(‘ввести данные:’);

readln(a,b,c);

d:=sqr(b)-4*a*c;

if d<0 then writeln(‘корней действительных нет’)

else BEGIN

if abs(d)=0 then BEGIN

x1:=-b/(2*a);

x2:=x1

END

else BEGIN

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a)

END;

writeln(‘x1=’,x1,’ x2=’,x2)

END

END.

ОПЕРАТОР ВАРИАНТА CASE

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

В общем случае оператор имеет вид:

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

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

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

. . . . . . . . . . . . . . . . . . . . . . ;

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

ELSE <оператор>

END;

где

n селектором является выражение любого скалярного типа, кроме вещественного;

n <список-меток-1, ... , список-меток-N> представляет собой список разделенных запятыми значений выражения селектора или одно его значение. Эти константы должны иметь тот же тип, что и селектор, и называются метками варианта.

n <оператор 1, ... , оператор N> являются любыми операторами языка Pascal, в том числе и составными.

Метка варианта - не обычная метка: это не обязательно целое число, она не описывается в разделе LABEL, на нее нельзя ссылаться в операторе GOTO.

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

СТРУКТУРНАЯ СХЕМА ОПЕРАТОРА ВЫБОРА

 
 

 

Селектор должен относиться к одному из целочисленных типов (находящихся в диапазоне – 32768 .. 32767): булевскому, литерному или пользовательскому. Список констант выбора состоит из произвольного количества значений, или диапазонов, отделенных друг от друга запятыми. Границы диапазона записываются двумя константами через разграничитель «..». Тип констант в любом случае должен совпадать с типом селектора.

Пример 4.

Составить программу вычисления площадей различных геометрических фигур:

Решение:

program pr5;

const pi=3.14;

var a,b,h,r: real;

n: integer;

begin

readln(n);

case n of

1: S:=a*b;

2: S:=(a*b)/2;

3: S:=(a+b)*h/2;

4: S:=pi*sqr®

end;

writeln(‘S=’,S)

end.

Пример 5.

Используя оператор варианта, составить программу вычисления значение функции:

Решение:

program pr5;

var a,b,c,x,y:real;

begin

writeln(‘Ввести a,b,c,x’);

readln(a,b,c,x);

case trunc(x) of

1..2: y:=a+b+c*sqr(x);

3..4: y:=exp(c*ln(a*sin(b*x)));

5..6: y:=sqrt(abs(a+b*x*sqr(x)))+c;

7..8: y:=a*ln(abs(b+c/(2*x)));

9..10: y:=exp(a*sin(x))+c*c*c

end;

writeln(‘y=’,y:8:2)

end.

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

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

1. Значения выражения «переключателя», записанного после служебного слова case, должны принадлежать дискретному типу; для целого типа они должны лежать в диапазоне integer.

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

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