Алгоритмы разветвляющейся структуры
Блочный синтаксис оператора If … Then
Эта форма применяется, когда необходимо выполнить несколько операторов или выполнить более сложный выбор в процедурах, выбирая между двумя, тремя или более ветвями. При этом исполняемые операторы записываются в несколько строк – блок. Блок должен заканчиваться оператором End If (конец блока If).
If логическое_выражение 1 Then
[блок_операторов_1]
[ElseIf логическое_выражение 2 Then
[блок_операторов_2]
…
[ElseIf логическое_выражение_N-1 Then
[блок_операторов_N-1
[Else
[блок_операторов_N] ]
End If
– логическое_выражение – выражение, возвращающее не нулевое значение (истина) или ноль (ложь);
– блок _ операторов – любое количество операторов.
При блочной форме проверяется сначала первое логическое выражение. Если оно ненулевое ("истина"), выполняются операторы блока, следующего за словом Then (блок_операторов_1). Если логическое выражение равно нулю ("ложь"), происходит переход к оценке условия, заданного в последующей строке ElseIf. При выполнении этого условия выполняются операторы данного блока (блок_операторов_2) и т.д. Если ни одно из условий ElseIf не выполняется (все "ложь"), то выполняются операторы блока Else (блок_операторов_N). Блоки Else и ElseIf могут быть опущены (тогда оператор If примет вид минимальной блочной формы). В блочную структуру If можно вставить любое количество условий ElseIf. Каждый из блоков может также содержать другую структуру с оператором If (так образуются вложенные блочные структуры If). Обратите внимание, слово ElseIf пишется слитно, а в слове End If, наоборот, ставится пробел. Слова If, ElseIf, Else и End If должны быть единственными в строке (другими словами, первый выполняемый оператор в каждом блоке должен начинаться со следующей новой строки). Последний блок операторов должен заканчиваться строкой End If.
Любую программу можно составить с использованием только самой простой формы оператора If – краткой линейной формы. Все остальные формы используются только для удобства записи программы. Как было уже сказано, если проверяются одно или два условия, то имеет смысл использовать более простую линейную форму If…Then или If...Then…Else.
Блочная форма оператора If … Then имеет несколько форм записи – они отличаются друг от друга наличием необязательных параметров (на приведенной выше общей форме записи они стоят в квадратных скобках). Минимальная блочная форма имеет вид:
If логическое_выражение Then
Оператор_1
Оператор_2
……………………………
Оператор_N
End If
Здесь Оператор_1, Оператор_2 и т.д. до N – последовательность операторов (блок), выполняющихся при выполнении логического_выражения. Количество операторов в блоке не ограничивается (главное, чтобы блок заканчивался ключевым словом End If). Действие оператора If поясняется блок-схемой, приведенной на рис. 3.
Максимальная блочная форма применяется, когда необходимо анализировать не одно или два условия, а целый ряд взаимосвязанных условий:
If логическое_выражение_1 Then
[блок_операторов_1]
ElseIf логическое_выражение_2 Then
[блок_операторов_2]
……………………………………………………………………………………………………
ElseIf логическое_выражение_N–1 Then
[блок_операторов_N–1]
Else
[блок_операторов_N]
End If
Рис. 3. Минимальная блочная форма оператора If…Then
Действие оператора If поясняется блок-схемой, приведенной на рис. 4.
Рис. 4. Максимальная блочная форма оператора If…Then
Пример 2. Определение количества знаков в числе от 0 до 1000.
Sub blochnaya_forma_If()
Dim x As Single
Dim y As Integer
m1: x = InputBox("Введите целое положительное число в интервале от 0 до 1000", "Запрос задачи")
If x < 0 Or x > 100 Or x <> Int(x) Then
'повтор ввода, если ввели не отвечающее требованиям число
MsgBox "Вы ввели не верное число", , "Повторите ввод"
GoTo m1:
ElseIf x < 10 Then
y = 1
ElseIf x < 100 Then
y = 2
ElseIf x < 1000 Then
y = 3
Else
y = 4
End If
MsgBox "Число " & x & " имеет " & y & " знак(а)", , "Решение задачи"
End Sub
Логические выражения, логические операции и операции отношения
Логическое выражение, стоящее после оператора If или ElseIf может быть истинным или ложным. В отличии от арифметических выражений логические выражения принимают не числовые значения, а логические значения – "TRUE" (истина) и "FALSE" (ложь).
В логических выражениях можно использовать следующие операции отношений: =, <, >, < =, > =, < > (равно, меньше, больше, меньше либо равно, больше либо равно, не равно).
В логическом выражении допустимы два или несколько условий (операций отношения), которые связываются логическими операциями And, Or, Not (И, ИЛИ, НЕ). Логические операции осуществляют манипуляции над битами. Они возвращают значение "Истина" (не нулевое) и "Ложь" (нулевое) значения. Описание логических операций приведено в таблице 1.
Таблица 1. Логические функции языка VBA
Операция |
Название |
Логическое выражение |
Объяснение |
And |
Логическое умножение (И) |
А And B |
Логическое выражение истинно, когда выполняются оба условия одновременно (истинно А и истинно В). |
Or |
Логическое сложение (ИЛИ) |
А Or В |
Логическое выражение истинно, когда хотя бы одно из условий выполняется (истинно или А или В или оба условия одновременно). |
Not |
Логическое отрицание (НЕ) |
Not A |
Логическое выражение истинно, когда условие A не выполняется (А ложно). |
Xor |
Исключающее ИЛИ |
А Xor В |
Логическое выражение истинно, когда условия А и В не совпадают. |
Eqv |
Эквивалент-ность |
А Eqv В |
Логическое выражение истинно, когда А и В одновременно истинны или одновременно ложны. |
Imp |
Импликация |
A Imp B |
A IMP B принимает значение "ложь", если A истинно, а В ложно, и значение "истина" в других случаях. |