Условные операторы используются для управления порядком выполнения других операторов. Наиболее часто используется оператор If…Then, который может иметь простую однострочную или блочную структуру.

Однострочный оператор имеет следующий синтаксис:

If условие Then оператор Else оператор

Если условие истинно, то выполняется оператор, указанный за Then, если условие ложно, то оператор, указанные за Else. Допускается его использование без части, начинающейся с Else, в этом случае, если условие ложно, то выполняется следующий за If оператор.

If а=7 Then Beep

В приведённом примере, если переменная «а» равна 7, то выдаётся звуковой сигнал.

Если после Then или Else должно выполняться несколько операторов, то используется блочная структура:

If условие Then

Операторы

Операторы

End If

Логика действия блочной записи аналогична однострочной.

Ещё одним оператором условия является оператор Select Case, который позволяет выполнить одну из нескольких групп операторов в зависимости от значения условия. Этот оператор имеет следующий синтаксис:

Select Case выражение

Case значение1

операторы

Case значение2

операторы

Case Else

операторы

End Select

Сначала вычисляется «выражение» и в соответствии с тем какое она принимает значение (значение1, значение2, и т.д.), выполняются соответствующие операторы. Если ни одно из указанных значений не реализуется – выполняются операторы, следующие за Case Else.

В качестве значения для блока Case можно указывать не только одно значение, но и несколько, разделённых запятой, например, (2, 5). Можно задать целую область (2 To 8), или воспользоваться относительным сравнением (Is > = 9). Если условию соответствует несколько блоков, то выполняется первый из них, как показано на следующем примере.

Select Case n

Case 0

Print “Число равно 0”

Case (- 10 To 10)

Print “Число между –10 и +10, кроме 0”

End Select

Запись разветвляющихся алгоритмов

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

Dim a,b,c,root1, root2, D As Single

Input a,b,c

D = b^2-4*a*c

If D<0 Then

Print “корней нет”

Else

root1 = (-b+Sqr(D))/2/a

root2 =(-b-Sqr(D))/2/a

Print “первый корень ”, root1

Print “второй корень ”, root2

End If

Как мы уже отмечали выше, если а=0, то возникнет ошибка при делении на ноль, чтобы этого избежать, надо вставить проверку этого случая, например, так.

Dim a,b,c,root1, root2, D As Single

Input a,b,c

If a = 0 Then

Print “уравнение не квадратное, т.к. а=0”

Else

D = b^2-4*a*c

If D<0 Then

Print “корней нет”

Else

root1 = (-b+Sqr(D))/2/a

root2 =(-b-Sqr(D))/2/a

Print “первый корень ”, root1

Print “второй корень ”, root2

End If

End If

Надо заметить, что в этом случае внутри первого оператора If имеется ещё один оператор If, поэтому две последние строчки это не ошибка записи, а признаки окончания сначала второго, вложенного оператора If, а затем первого оператора If.

Эту программу можно ещё усовершенствовать, если выдавать решение и при равенстве а=0. В этом случае мы имеем линейное уравнение , которое может иметь решение , если конечно, . Вам предлагается внести соответствующие усовершенствования в предыдущую программу самостоятельно.

Контрольные вопросы

1. Каков синтаксис условного оператора If…Then?

2. Каков синтаксис условного оператора If…Then…Else?

3. Каков синтаксис блочного условного оператора If…Then…Else?

4. Каков синтаксис условного оператора Select…Case?

5. Что может быть использовано в качестве значения для блока Case?

6. Допускают ли условные операторы вложенность больше двух?