Условные операторы позволяют выбирать для выполнения один или не одного оператора из двух или из списка. Используются для организации ветвлений в программе, значительно реже – для организации циклов.
Условный оператор ::= "оператор_if"| "оператор_case"
Оператор IF
Оператор_if::= "if" логическое_выражение "then" оператор1 ["else" оператор2]
Если логическое выражение принимает значение True, то выполняется оператор1, иначе - оператор2.
Например:
Задача 4. Дано 2 числа. Найти наибольшее из них.
Решение:
var a,b:integer;
begin
readln(a,b); {вводим 2 числа с клавиатуры }
{находим максимальное и выводим его на экран}
if a>b then writeln(a) else writeln(b);
readln;
end.
Задача 5. Найти максимальное из трех чисел.
Решение:
var a,b,c,z:integer;
begin
readln(a,b,c);
if a>b then z:=a else z:=b; {переменной z присваиваем максимальное
из двух первых чисел}
{сравниваем z с третьим числом и выводим максимальное на экран}
if z<c then z:=c;
writeln(z);
readln;
end.
Задача 6. Определить, поместится ли открытка со сторонами a и b в конверте со сторонами x и y.
Решение:
var a,b,x,y:integer;
begin
write('Введите через пробел стороны открытки ');
readln(a,b);
write('Введите через пробел стороны конверта ');
readln(x,y);
{ Воспользуемся при формировании логического выражения в условном операторе операциями AND и OR}
if ((a<x)and(b<y))or((b<x)and(a<y)) then
writeln('Открытка помещается в конверт')
else
writeln('Открытка в конверт не входит');
readln;
end.
Задача 7. Решить квадратное уравнение ax2+bx+c=0
Var a,b,c:real; {коэффициенты уравнения}
d:real; {дискриминант}
x1,x2:real; {корни уравнения}
Begin
Readln(a,b,c); {вводим коэффициенты}
If a=0 then
writeln('Уравнение не является квадратным')
Else begin
{находим дискриминант}
D:=sqr(b)-4*a*c;
{проводим анализ дискриминанта и требуемые вычисления во вложенных операторах IF}
If d<0 then
writeln('Уравнение не имеет действительных корней')
else
if d=0 then begin
x1:=-b/(2*a);
writeln('Уравнение имеет 1 корень: X=',x1:7:3);
end
else begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln('Уравнение имеет 2 корня:');
writeln(' X1=',x1:7:3);
writeln(' X2=',x2:7:3);
end;
end;
readln;
end.
Оператор CASE
В программировании очень часто возникают ситуации, когда требуется провести выбор из достаточно большого количества вариантов. В ТП для этих целей служит оператор case.
Оператор case состоит из выражения (селектора) и списка операторов, каждому из которых предшествует одна или более констант (они называются константами выбора) или ключевое слово else.
Оператор_case::= "case" выражение_селектор "of"
выбор {";"выбор}
["else" оператор [";"]]
"end"
выбор::=константа [".." константа]
{"," константа [".." константа]} ":" оператор
Селектор должен иметь порядковый тип размера байт или слово (о порядковых типах будет рассказано в параграфе 1.7.1.1, а сейчас момент нам достаточно знать, что тип Integer подходит под данное правило). Все константы выбора должны быть уникальными и иметь порядковый тип, совместимый с типом селектора.
Оператор case приводит к выполнению оператора, которому предшествует константа выбора, равная значению селектора или диапазону выбора, в котором находится значение селектора.
Если такой константы выбора или такого диапазона выбора не существует, то выполняется оператор, следующий за ключевым словом else. Если ветвь else отсутствует, то не выполняется никакого оператора.
Например: По введенному часу определить время суток.
Var hour:integer;
Begin
Readln(hour);
Case hour of
0,24:writeln('Полночь');
12: writeln('Полдень');
1..3: writeln(Ночь');
4..10: writeln('Утро');
11,13..16: writeln('День');
17..11: writeln('Вечер')
else writeln('Ошибка при вводе числа');
end;
readln;
end.