На предыдущей странице мы разобрались, что такое оператор присваивания – он используется для придания переменным конкретных значений. Следующим по важности использования можно назвать условный оператор. Но в чем его суть?
Помните, как в старой доброй сказке витязь стоял перед вещим камнем и читал надпись не нем: «Направо пойдёшь – коня потеряешь, себя спасёшь; налево пойдёшь – себя потеряешь, коня спасёшь; прямо пойдёшь – и себя и коня потеряешь»? Чего ждал он, о чем размышлял? Естественно, о проблеме выбора, ведь у него стояла не лёгкая задача – в любом случае витязь что-то терял. Благо, что нам нечего терять, но выбирать придется.
Представим себе классическую задачу решения квадратного уравнения: если дискриминант положительный – тогда уравнение имеет два разных решения, если он равен нулю – то одно, а при отрицательном дискриминанте вещественных решений нет вообще. Идея здесь одна – решение квадратного уравнения зависит от дискриминанта, а точнее – от его знака. Или ещё задача: определить количество дней в году. Естественно, что количество дней зависит от того, является год високосным или нет.
А вот пример геометрической задачи подобного рода: выяснить, будут ли три числа a, b и c сторонами треугольника. Мы знаем, что три числа будут сторонами некоего треугольника тогда и только тогда, когда сумма любых двух сторон этого треугольника больше третьей стороны. Здесь тоже, как мы видим, решение задачи зависит от некоторых условий (трех неравенств).
Эти три задачи объединяет одно: здесь нельзя просто так составить программу на Паскале, чтобы задача решалась «одним махом» – из-за наличия определенных условий. Поэтому в таких случаях на помощь приходит условный оператор, который распределяет выполнение операторов в зависимости от условий. Записывается следующим образом:
..................
if <условие> then <оператор1>
else <оператор2>;
..................
Эта конструкция работает по такому принципу. Сначала проверяется условие (после if); если оно истинно, то выполняется оператор1
(после then), в противном случае – оператор2
(после else). И ещё: if означает «если», then – «тогда», else – «иначе». Все это зарезервированные слова в Pascal, всегда выделяются жирным шрифтом. Ещё одно важное замечание: перед else никогда не ставится точка с запятой, поскольку оно составляет единое целое с if и then. Поясним, как используется условный оператор на простом примере:
var
t: real; { Температура воздуха }
begin
writeln('Введите температуру воздуха:');
readln(t);
if t > 0 then writeln('вода не замерзла')
else writeln('вода замерзла');
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Перепишите этот небольшой код в среду PascalABC.Net и запустите (кнопка F9 на клавиатуре). Посмотрите, как программа работает. Здесь идет проверка температуры t воздуха – если она больше 0 (условиеt > 0
после if), то выполняется оператор после then и мы увидим ответ: «вода не замерзла»; в противном случае (то есть при температуре от 0 и ниже:t ≤ 0
- это условие противоположное по отношению к предыдущемуt > 0
) выполнится оператор после else и ответ будет другим: «вода замерзла» (без кавычек). Это пример простейшей задачи на использование условного оператора. Другие задачи такого типа вы можете посмотреть в материале Сравнение чисел.
В этой задаче, правда, мы не учли температуру кипения воды (при нормальном атмосферном давлении - 100°С). Поэтому перепишем предыдущую программу немного по-другому:
var
t: real;
begin
writeln('Введите температуру воздуха:');
readln(t);
if t <= 0 then writeln('вода замерзла')
else
if t < 100 then writeln('вода нагревается')
else writeln('вода закипела');
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Здесь надо сделать некоторые пояснения. Сначала мы проверяем отрицательную или нулевую температуру (t≤0): если это действительно так, то выполняется оператор выводаwrite('вода замерзла')
– это и есть оператор1. В противном случае (то есть, если температура положительная) должен быть выполнен оператор2, стоящий после else. Но мы видим, что там находится ещё одна конструкция условного оператора со своими if, then и else.
Тогда постает вопрос: что именно считать оператором2? А как раз эта вся конструкция и будет оператором2, поскольку программой она воспринимается как один оператор (условный оператор - единственный оператор, состоящий из трех частей: if - then - else). Таким образом, здесь мы будем проверять положительные температуры: если температура меньше 100 (t<100), то выполнится оператор вывода write('вода нагревается')
, иначе (от 100 и выше градусов) вступит в действие write('вода закипела')
. Все это будет относиться к первому else.
Перепишите программу в PascalABC.Net и запустите. Вводите разные значения, помня, что при температуре от 0° и ниже вода замерзает, от 100° и выше – закипает, а во всех остальных случаях не замерзает и не закипает. Если результаты совпадают, значит программа работает.
Бывает так, что при истинности или ложности условия (после if) вместо выполнения одного оператора (оператора1 или оператора2) должна выполнятся целая группа операторов. В этом случае используются операторные скобки begin – end, в которые записываются все необходимые команды. В общем случае запись такова:
...................
if <условие> then
begin
<оператор1.1>;
<оператор1.2>;
. . . . . . .
<оператор1.N>;
end
else
begin
<оператор2.1>;
<оператор2.2>;
. . . . . . .
<оператор2.M>;
end;
..................
Как видно, при истинности условия выполняется одна группа из N операторов, а при ложности – другой набор из M операторов. Условие (между if и then) тоже может состоять из нескольких частей. Для примера решим задачу о существовании треугольника по его сторонам:
Задача. Дано три числа: a, b и c. Определить, существует ли треугольник со сторонами, равными этим числам.
Как упоминалось выше, треугольник будет существовать при выполнении трех условий: a+b>c, b+c>a, c+a>b
. Поскольку все три неравенства должны выполняться одновременно, то мы их объединим оператором and (логическое «и»). В итоге получим:
program treugolnik;
var
a, b, c: real;
begin
writeln('Введиде три положительные числа:');
readln(a, b, c);
write('Треугольник со сторонами ', a, ', ', b, ' и ', c);
{ Проверяем условие существования треугольника: }
if (a+b>c)and(b+c>a)and(c+a>b) then writeln(' существует')
else writeln(' не существует');
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Как видно из программы, после if идет объединение сразу трех логических выражений, которые должны выполняться в одном условии. Обычно в таких случаях все три выражения берут в скобки, но здесь этого делать не обязательно. Для проверки работоспособности написанной нами программы перепишите её в PascalABC.Net и запустите (кнопка F9 на клавиатуре). Помните, что числа вводятся через пробел. Посмотрите, как работает программа. Всегда старайтесь именно переписывать, а не копировать код со страницы – в этом случае процесс осмысления материала идет намного быстрее.