Условные операторы используются для управления порядком выполнения других операторов. Наиболее часто используется оператор 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. Допускают ли условные операторы вложенность больше двух?