Сначала вычисляется выражение; если оно истинно, то выполняется <блок операторов 1>, в противном случае выполняется <блок операторов 2>.
В качестве <выражения> могут быть использованы только булевские (логические) выражения, которые могут принимать значения True и False. В таких выражениях очень часто используются операции отношения и логические операции.
Например, a>0, b+c<=d, (i<0) and (j<i) и т.д.
Перед зарезервированным словом else не ставится точка с запятой!!!
Если блок <операторов 1> или блок <операторов 2> содержит всего один оператор, то его можно не заключать в операторные скобки Begin … End.
Пример:
var y,i: real;
begin
write('Введите число: ');
readln(i);
if i>=0 then y:=i
else
y:=-i;
writeln('Абсолютное значение введенного числа равно',y:8:4);
end.
Конструкция else не обязательна. Если значение <выражения> ложно, а конструкция else опущена, то управление передается на оператор, следующий в программе за оператором if.
Пример:
var y,i: real;
begin
write('Введите число: ');
readln(i);
if i<0 then i:=-i;
y:=i;
writeln('Абсолютное значение введенного числа равно',y:8:4);
end.
Допускается вложение оператора if в <блок операторов 1> или <блок операторов 2> другого оператора if. При вложении операторов if рекомендуется для ясности группирования операторов использовать операторные скобки Begin …End, ограничивающие <блок операторов 1> и <блок операторов 2>.
Если же операторные скобки отсутствуют, то компилятор ассоциирует каждое зарезервированное слово else с ближайшим оператором if, у которого отсутствует конструкция else.
Пример:
Var i:real;
Begin
Writeln(‘Введите возраст:’);
Readln(i);
if i>0 then
if i<=14 then writeln('Паспорта нет')
else if i>110 then write('Некорректный возраст');
else writeln(У такого гражданина должен быть паспорт России“);
end.
Решение задачи: Нахождение корней квадратного уравнения.
var a, c, b, x1, x2, d: real;
begin
writeln('input a,b,c');
readln(a,b,c);
d:=(sqr(b)-4*a*c);
writeln('d=', d:8:5);
if d<0 then
writeln('Действительных корней нет');
else
if d=0 then
writeln('x1=x2=',-b/(2*a))
else
begin
x1:=(-b-sqrt(d))/(2*a);
x2:=(-b+sqrt(d))/(2*a);
writeln('x1=', x1:4:2);
writeln('x2=', x2:4:2);
end;
end.
4.1.2. Конструкция множественного выбора Case … Of
Конструкция Case … Of является идеальным средством для обработки ситуаций с несколькими исходами, года условие может принимать более двух значений.
Синтаксис:
Case <порядковая переменная> Of
<значение 1>:
begin
<блок операторов 1>;
end;
<значение 2>:
begin
<блок операторов 2>;
end;
…
<значение n>:
begin
<блок операторов n>;
end;
Else
begin
<блок операторов n+1>;
end;
End;
В общем случае <порядковая переменная> может быть целочисленного, символьного или логического типа.
В зависимости от значения <порядковой переменной> выполняется тот или иной <блок операторов>. Если значение ни разу не встречается в списке, то выполняется блок операторов конструкции Else.
В операторе Case … Of перед конструкцией Else ставится точка с запятой!!!
Данный оператор заканчивается зарезервированным словом End;.
Конструкция Else необязательна.
Если один и тот блок операторов необходимо выполнять при различных значениях <порядковой переменной>, то эти значения можно указывать в одной строке через запятую, либо, если они идут подряд, можно указать два крайних значения, разделив их двумя точками.
Пример:
Var n:integer;
…
Case N Of
1:Writeln('стол');
2..4: Writeln('стола');
0, 5..9: Writeln('столов');
Else
Writeln('чересчур много столов');
End;
Конструкция Case … Of очень часто используется для замены конструкций из многочисленных вложенных операторов If … Then.
Контрольные вопросы по теме «Организация ветвления»
1. Чем отличается линейный алгоритм от ветвления?
2. Что такое вычислительный процесс разветвляющейся структуры? Как организовать ветвление вычислений: а) на две ветви; б) на три ветви?
3. Какие ключевые слова используются в Паскале для организации ветвления? Что находится между ними?
4. Чем полное ветвление отличается от неполного?
5. Как оформлять текст программы, чтобы он был понятнее?
6. Что необходимо использовать, если в случае истинности некоторого условия нужно выполнить несколько операторов?
7. Как быть, если в случае истинности некоторого условия никаких действий выполнять не требуется, а в случае ложности нужно выполнить несколько действий?
8. Какую управляющую структуру Паскаля нужно использовать, если проверяемое выражение может принимать несколько возможных значений, и в каждом случае необходимо выполнить разные действия?
9. В каком случае количество операторов begin в программе не должно соответствовать количеству операторов end?
10.Составить последовательность операторов для вычисления величины z=0, если x<-2; z=1, если -2 7, x < 2; z=-1, если x>2.
11.Зачем необходимо при отладке программы тестировать все ветви алгоритма?