Условия - очень важное понятие в программировании. В каждой хорошей программе есть пара десятков условных операторов, циклически проверяющихся на истинность.
Возьмём, к примеру, восточную игру Го. Смысл её состоит в том, чтобы окружать фишки (шарики, камешки) противника, удаляя их таким образом с поля. Программа, имитирующая игру в Го, после каждого хода проверяет, оркужены ли фишки одного игрока фишками другого. При обнаружении такого случая программа убирает окружённых с поля.
Перейдём к делу. В Паскале, как, впрочем, и во многих других языках, условный оператор начинается со слова if (если). Далее идёт само условие, например, I=1 . Затем идёт слово then и (лучше на следующей строчке) оператор, выполняющийся в случае истинности условия, причём только один. Можно (необязательно) предусмотреть реакцию программы на ложность условия, написав после всего этого слово else (иначе) и соответствующий оператор. Например:
program UgadayChislo;
var
I, J: Integer;
begin
I:=25; {Задуманное число}
Write('Я загадал число. Сможешь угадать? ');
ReadLn(J);
if J = I then {Если число угадано}
WriteLn('Угадал!!! Откуда ты его знаешь?')
{Перед else точку с запятой не ставить!}
else
WriteLn('Ха-ха! Не угадал!');
WriteLn('Нажми Enter'); {Этот и все последующие операторы не имеют никакого отношения к вышеописанному условию}
ReadLn;
end.
Предусматриваются также знаки сравнения и сравнение выражений.
program Temperature;
var
Temp: Integer; {Имя переменной может состоять из нескольких букв}
begin
Write('Введите температуру: ');
ReadLn(Temp);
Write('Температура ', Abs(Temp),' градусов ');
{Abs - функция, возвращающая в место вызова модуль данного числа, в данном случае значения переменной Temp}
if Temp > 0 then
Write('выше нуля')
else
if Temp < 0 then
{В данном случае мы записываем ещё один условный оператор, потому что возможен третий случай, при котором Temp = 0}
Write('ниже нуля');
WriteLn; {Переход на новую строку}
Write('Нажмите Enter');
ReadLn;
end.
То, что оператор один, однако, нисколько не мешает делать несколько действий при одном условии. Конечно, можно подумать, что перед каждым действием нужно писать одно и то же условие. Например:
if I = 10 then
I:=I + 1;
if I = 10 then
WriteLn('Число увеличено. Вот оно: ', I);
Здесь приведён такой пример, который доказывает, что данный способ неэффективен. Ведь при выполнении первого условия значение I меняется, и в результате вывод текста не осуществится.
Есть другой, более верный способ: заключить оба этих действия в составной оператор. Составной оператор - это оператор, объединяющий несколько операторов в один. Записывается он также, как основной блок программы:
begin
...
end;
За исключением того, что после слова end ставится точка с запятой. Таким образом, предыдущий фрагмент можно исправить так:
if I = 10 then
begin
I:=I + 1;
WriteLn('Число увеличено. Вот оно: ', I);
end;
Можно для одной группы действий проверять несколько условий, объединяя их логическими операциями. Две наиболее часто используемые логические операции - and и or, означающие и и или соответственно. При объединении условий они заключаются в скобки. Вот пример программы, использующей обе операции.
program DvaChisla;
var
I, J, K, L: integer;
begin
I:=11; {Задуманные}
J:=45; {числа}
Write('Я загадал два числа. Попробуй-ка их отгадать! ');
ReadLn(K, L); {Числа вводить, разделяя их пробелом}
if ((K = I) and (L = J)) {Если первое введенное число равно первому задуманному числу, и второе введенное равно второму задуманному}
or ((K = J) and (L = I)) then {Альтернативнй вариант для случая, если числа введены в обратном порядке}
WriteLn('С ума сойти! Ты экстрасенс?')
else
WriteLn('Я знал, что с двумя числами не справишься!');
WriteLn('Нажми Enter');
ReadLn;
end.
Бывают такие случаи, когда нужно выполнять те или иные действия при разных значениях одной переменной. В таких ситуациях неудобно использовать оператор if:
if I = 1 then
...
else
if I = 2 then
...
else
if I = 3 then
...
Специально для таких случаев существует оператор выбора. Давайте разберём его строение.
1 2 3
case I of
4 5 6 7
1 : WriteLn('Маловато');
8
2 : WriteLn('Нормально');
9
3 : WriteLn('Достаточно');
10
else
11
WriteLn('Что?');
12
end;
1 - слово, обозначающее начало оператора выбора;
2 - переменная, в зависимости от значения которой выполняется то или иное действие;
3 - за этим словом идёт основная часть оператора выбора;
4 - одно или несколько значений, при котором/ых выполняется указанное далее действие; несколько значений указывается через запятую: 1, 2, 3 , или промежутком: 1..11 (от 1 до 11);
5 - разделитель значений 4 и оператора 6;
6 - оператор, выполняющийся в случае принадлежности значения переменной 2 величинам, указанным в пункте 4; можно использовать составной оператор;
7 - конец оператора;
8 - очередной вариант; как и первый, состоит из пунктов 4, 5, 6, 7;
9 - очередной вариант;
10 - за этим словом идёт оператор, выполняемый в любом другом случае; и слово, и оператор можно не писать;
11 - собственно оператор;
12 - конец оператора выбора.
Конечно, оператор выбора сложен, особенно на первый взгляд, но зато очень удобен: в нём всё "разложено по полочкам".
Часто такой вид оператора используют для создания меню. В зависимости от введённого числа выполняется та или иная команда. Например:
program Razvilka; {Программа "Развилка"}
var
I: Integer;
begin
WriteLn('1. Прямо');
WriteLn('2. Налево'); {Меню}
WriteLn('3. Направо');
ReadLn(I); {Выбор предоставляется пользователю}
case I of
1: Write('Убиту'); {Разный текст}
2: Write('Женату'); {в зависимости}
3: Write('Богату'); {от введённого числа}
else {Если любое другое число}
Write('Непоняту'); {Такого нет}
end;
Write(' быть'); {Окончание фразы}
ReadLn;
end.
Ну вот, наконец-то, и всё. Этих знаний вполне хватает для создания разветвляющихся программ.