Урок 3

Операторы управления. Оператор управления if.

На предыдущих уроках мы рассматривали скрипты, строки которых выполняются последовательно одна за другой. Для изменения порядка выполнения строк скрипта используются операторы управления.

На этом уроке мы познакомимся оператором управления if.

На этом уроке мы познакомимся оператором управления if, которые меняют порядок выполнения строк скрипта.

Напишем скрипт для решения квадратного уравнения

ax2 + bx + c = 0

Как вы уже наверно знаете, решение даётся формулой:

x = (-b ± √D) / 2a, где D = b2 – 4ac

В зависимости от того, будет ли дискриминант D положительным, равным нулю или отрицательным, решений будет два, одно или ни одного. Напишем сначала скрипт на случай положительного дискриминанта, коэффициенты возьмите такие: a = 1, b = 4, c = -3. Запустите программу «Василиса», выполните команду «Новый» и наберите скрипт

a = 1
b = 4
c = 3
D = b*b - 4*a*c
x1 = (-b + sqrt(D)) / 2 / a
x2 = (-b - sqrt(D)) / 2 / a

Обратите внимание на некоторую разницу написания алгебраических формул и выражений скрипта. Фрагмент скрипта «/ 2 / a» эквивалентен «/(2*a)». Выполните команды «Работать» и «Старт».

Корни квадратного уравнения

В строках x1 и x2 таблицы «переменные» - два решения квадратного уравнения: -1 и -3.

Попробуем решить уравнение при других значениях коэффициентов. Переключитесь в режим редактирования, вместо «c = 3» наберите «c = 5». Перейдите в режим работы и стартуйте. Выполнение скрипта остановится на четвёртой строке.

Сообщение об ошибке

А в центре экрана появится сообщение об ошибке

Сообщение об ошибке

Что совершенно ожидаемо: входной параметр функции sqrt равен -4.

Поставим задачу так: x1 и x2 должны вычисляться только при условии неотрицательного дискриминанта. Для этого нам понадобится оператор «if». Вот так выглядит решение задачи:

a = 1
b = 4
c = 5
D = b*b - 4*a*c
if D >= 0
  x1 = (-b + sqrt(D)) / 2 / a
  x2 = (-b - sqrt(D)) / 2 / a
stop

Оператор управления if состоит из ключевого слова «if» и логического (булевского) выражения. В нашем примере это выражение «D >= 0».

Ранее мы сталкивались с числовыми выражениями. Логическое выражение в отличие от числового может принимать только 2 значения ИСТИНА или ЛОЖЬ (True или False). В нашем случае D=-4, следовательно, выражение «D >= 0**» не соответствует истине, т.е. имеет значение ЛОЖЬ.

Если логическое выражение оператора «if» истинно, то после строки с оператором «if» выполняется блок строк скрипта, которые расположены непосредственно под ним. Если логическое выражение ложно, этот блок строк не выполняется, а выполняется строка скрипта, имеющая тот же отступ от левого края, что и оператор «if».

Как вы уже, наверное, догадались, блок образуют строки, имеющие одинаковый отступ от левого края. Отступ блока строк под оператором «if» должен на две позиции превышать отступ самого оператора «if». Перейдём в режим редактирования, вставим строку «if D >= 0», В строки «x1 = …» и «x2 = …» вставим слева отступы 2 пробела. Перейдём в режим работы и пойдём в шаговом режиме начиная с нулевой строки. Обратите внимание, что после строки 4 выполнение скрипта перейдёт сразу на «stop», а строки 5 и 6 будут перепрыгнуты.

Оператор управления if

Теперь выполним скрипт с коэффициентами, при которых дискриминант положителен. В режиме редактирования вместо «c = 5» наберите «c = 3». Перейдите в режим работы и пройдите с начала до конца в шаговом режиме. С такими значениями коэффициентов дискриминант «D» будет положительным, после строки 4 будут выполняться строки 5 и 6, и в таблице переменных вы должны увидеть 2 решения уравнения:

x1=-1  и x2=-3.

Для полноты картины перечислим логические операторы, которые можно использовать в логических выражениях:

больше = больше или равно < меньше <= меньше или равно <> не равно

Ключевое слово NOT перед логическим выражением меняет его значение на противоположное.

Логические выражения можно соединять в более сложные логические выражения ключевыми словами AND, OR (И, ИЛИ).

Примеры логических (булевских) выражений:

Выражение Значение
NOT(1>2) ИСТИНА
(1>2) AND (2<3) ИСТИНА
(1>2) AND (2>3) ЛОЖЬ
(1>2) OR (2<3) ИСТИНА
(1<2) OR (2>3) ЛОЖЬ

В операторе «if» можно использовать логические выражения любой сложности.

Подробнее о логических выражениях можно прочитать в Википедии или в школьном учебнике по информатике. В заключение, рассмотрим расширенный вариант оператора if. Назовем его оператором if-else. Под оператором if с отступом вправо на 2 позиции располагается блок строк, который выполняется, если логическое выражение оператора if имеет значение ИСТИНА, Строкой ниже располагается ключевое слово «else» (иначе), под ним с отступом вправо на 2 позиции располагается второй блок строк, которые выполняется, если логическое выражение оператора if имеет значение ЛОЖЬ.

a = 1
b = 4
c = 4
D = b*b - 4*a*c
if D < 0
  stop

if D > 0
  x1 = (-b + sqrt(D)) / 2 / a
  x2 = (-b - sqrt(D)) / 2 / a
else
  x = -b / 2 / a
stop

Оператор «if D < 0» имеет только один блок строк, который состоит только из одной строки

  stop

Если дискриминант отрицательный, после оператора if будет выполнен оператор stop и выполнение скрипта прекратится.

Оператор «if D > 0» имеет два блока строк. Первый блок

  x1 = (-b + sqrt(D)) / 2 / a
  x2 = (-b - sqrt(D)) / 2 / a

будет выполняться при условии положительного дискриминанта (логическое выражение «D > 0» будет иметь значение ИСТИНА),

Второй блок

  x = -b / 2 / a

будет выполняться при условии нулевого дискриминанта (логическое выражение «D > 0» будет иметь значение ЛОЖЬ),

Перейдите в режим редактирования, наберите этот скрипт и в шаговом режиме проследите за порядком выполнения строк скрипта.

Оператор управления if

Посмотрите, как меняются результаты расчётов и порядок выполнения строк скрипта, при условии «c=3» и «c=5».