Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика VBA.pdf
Скачиваний:
893
Добавлен:
27.03.2016
Размер:
1.1 Mб
Скачать

3 Разветвляющиеся алгоритмы

Алгоритмы разветвляющейся структуры – это такие алго-

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

Такие задачи можно описать с помощью алгоритмов разветвляющейся структуры. В таких алгоритмах выбор направления продолжения вычисления осуществляется по итогам проверки заданного условия. Ветвящиеся процессы описываются оператором If (условие).

Во всех алгоритмических языках программирования оператор разветвления кодируется как оператор If (ЕСЛИ). Этот оператор может иметь различный синтаксис, но реализует фрагмент блок-схемы, изображенный на рисунке 1.1.

ЕСЛИ <Логическое выражение> ТО

[действия алгоритма, если условие выполнено]

ИНАЧЕ

[действия алгоритма, если условие НЕ выполнено] КОНЕЦ оператора ЕСЛИ

Логическое выражение может содержать логические константы и логические выражения, содержащие арифметические выражения, переменные и константы, связанных между собой операциями сравнения.

В VBA операции сравнения обозначаются символами, приведенными в таблице 3.1. Символами Е1 и Е2 обозначены любые арифметические выражения.

36

Таблица 3.1 - Символы операций сравнения

В алгебре

Синтаксис

Наименование/описание

 

 

 

< (меньше)

El < Е2

Меньше, чем. True, если El меньше, чем

Е2, иначе – False

 

 

 

> (больше)

El > Е2

Больше, чем. True, если Е1 больше, чем

Е2, иначе – False

 

 

 

= (равно)

El = Е2

Равенство. True, если El равно Е2,

иначе – False

 

 

 

(меньше

El <= Е2

Меньше, чем или равно. True, если Е1

или равно)

 

меньше или равно Е2, иначе – False

(больше

El >= Е2

Больше, чем или равно. True, если Е1

или равно)

 

больше или равно Е2, иначе – False

(не равно)

El <> Е2

Не равно. True, если Е1 не равно Е2,

если Е1 и Е2 одинаковы, то False

 

 

 

Операции сравнения выполняются в том порядке, в котором они записаны, но только после выполнения арифметических действий (приоритеты операций VBA приведены в приложении Б).

Логическое выражение в операторе If имеет значение "истина", если записанная в нем операция сравнения справедлива, или "ложь", если операция сравнение не выполнена. При выполнении логического оператора If вычисляется значение логического выражения. Если оно

– «истина», то выполняются действия алгоритма по ветви «ДА». Если логическое выражение прияло значение «ложь», то выполняются действия алгоритма по ветви «НЕТ».

Простые логические выражения можно объединять в более сложные с помощью логических операций: «И», «ИЛИ», «НЕ» и других. В таблице 3.2 представлены операции математической логики, реализованные в VBA. Символами Е1 и Е2 обозначены любые арифметические выражения, допустимые в языке программирования. В

37

таблице 3.3 приведена таблица истинности для основных логических операций.

Таблица 3.2 - Логические операторы VBA

Оператор

Синтаксис

Имя/Описание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

And

El And E2

Конъюнкция. True, если оба выражения Е1 и

Е2 имеют значение True, иначе – False

 

 

 

 

 

 

 

 

 

 

 

Or

El Or E2

Дизъюнкция. False, если оба выражения Е1 и

Е2 имеют значение False, иначе –True

 

 

 

 

 

 

 

 

 

 

 

Not

 

Not El

Отрицание. True, если Е1 имеет значение

 

 

 

 

 

 

False; False, если El является True

 

 

 

 

 

 

Исключение. True, если Е1 и Е2 имеют раз-

Xor

El Xor E2

ные значения; если одинаковые, то результат

 

 

 

 

 

 

False

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Eqv

El Eqv E2

Эквивалентность. True, если Е1 имеет то же

самое значение, что и Е2; иначе – False

 

 

 

 

 

 

 

 

 

 

 

Imp

El Imp E2

Импликация. False, когда Е1 является рав-

ным True и Е2 равно False; иначе True

 

 

 

 

 

 

 

 

 

 

 

Таблица 3.3 - Таблица истинности логических операций

 

 

 

 

 

 

 

 

 

 

 

 

А

 

В

 

Not A

 

A and B

A or B

A xor B

 

 

 

 

 

 

 

 

 

 

 

 

0

 

0

 

1

 

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

1

 

1

 

0

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

0

 

0

 

0

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

0

 

1

1

0

 

 

 

 

 

 

 

 

 

 

 

 

Сложное (составное) выражение (complex expression) это любое выражение, образованное из двух или более выражений. Приоритеты выполнения операций при вычислении сложных выражений приведены в таблице Б.4 приложения Б.

38

3.1 Оператор IF и его формы записи

Оператор сравнения («If») является структурным оператором и имеет следующую форму записи.

If Логическое_выражение ТНЕN ' (то / тогда)

операторы блока ветви «ДА»

[ Else ' (иначе)

операторы блока ветви «НЕТ»]

End If ' (конец оператора IF) .

Если значение логического выражения «истина», выполняются операторы блока ветви «ДА, а операторы блока ветви «НЕТ» игнорируются. Если значение логического выражения есть «ложь», то операторы блока ветви «ДА» игнорируются и выполняются операторы блока ветви «НЕТ». Конец группы операторов блока ветви «ДА» отмечается оператором Else, а конец группы операторов блока ветви «НЕТ» и всего блока If - оператором End If. После того, как выполнены операторы блока ветви «ДА», выполняется оператор, следующий за оператором End If.

Пример 3.1.

If A > B Then

BIG = A

Else

BIG = B

End If Debug.print BIG

В этом примере, если А > В, переменной BIG присваивается значение А и дальше управление передается оператору следующему за оператором END IF, т.е. оператору вывода значения переменной BIG в окно отладки интегрированной среды программирования VBA. Если значение переменной А окажется меньше либо равным значе-

39

нию В, то переменной BIG присваивается значение В. Далее выполняется оператор следующий за оператором END IF, т.е. оператор Debug.print BIG. Таким образом, в данном примере переменной BIG присваивается наибольшее значение из переменных А и В.

Для улучшения читаемости программы рекомендуется записывать структурные операторы так, чтобы выделялась его структура. Для оператора If правила оформления формулируются следующим образом: первые символы ключевых слов оператора (If, Else, End If) записываются в одной и той же позиции строки (строго по вертикали), а первые символы операторов ветви «ДА» и «НЕТ» записываются со смещением на три позиции вправо относительной этой позиции строки. Данное требование не является обязательным для выполнения, но придерживаясь его программист получает более читабельную программу, и оно позволяет избежать ошибок при записи вложенных операторов If.

Синтаксис языка программирования позволяет записывать в одной строке несколько операторов, разделенных символом двоеточие (:). Используя эту возможность, можно оформить программу предыдущего примера следующим образом:

If A > B Then

BIG = A

Else : BIG = B

End If Debug.print BIG

Однако, по мнению авторов, читаемость программы в этой форме записи хуже приведенного выше фрагмента.

Операторы ветви «НЕТ» в блоке сравнения могут отсутствовать (см. рисунок 3.1).

40

ДА

НЕТ

Условие

Операторы ветви «ДА»

Рисунок 3.1 – Блок сравнения с одной ветвью

В этом случае при записи структурного оператора If ключевое слово Else можно не задавать и если результатом логического выражения будет значение "ложь", после строки If выполняться будет оператор, следующий за оператором End If. Синтаксис такого оператора следующий:

If Логическое_выражение ТНЕN ' (то / тогда)

операторы блока ветви «ДА»

End If ' (конец оператора IF) .

Используя эту форму записи программу предыдущего примера можно оформить следующим образом:

BIG = B

If A > B Then

BIG = A

End If Debug.print BIG

В случае, когда блок сравнения не содержит ветви «НЕТ», можно использовать упрощенную запись оператора If, которая не содержит оператора End If. Синтаксис такого оператора следующий:

41

If Логическое_выражение ТНЕN α1 = β1 [:α2 = β2 [: ]],

где αi = βi - оператор присваивания, в котором переменная αi получает значение выражения βi . Если записывается один оператор присваивания, то символ «двоеточие» не ставится.

В такой форме записи программу рассматриваемого примера можно оформить таким образом:

BIG = B If A > B Then BIG = A

Debug.print BIG

Это наиболее компактная форма записи определения максимального значения двух переменных, записанная с помощью оператора If.

Помимо оператора If, VBA имеет в своем арсенале функцию IIF, которая позволяет реализовывать в программе блоки сравнения в одной строке. Синтаксис этой функции

IIf ( условие, значение_1, значение_2 )

Если условие, записанное в первом аргументе функции выполняется (имеет значение True), то результатом функции будет значение выражения, записанное во втором аргументе функции (значение_1). Если же условие, заданное в первом аргументе, не выполняется (принимает значение False), то возвращаемый результат – значение выражения, записанное в третьем аргументе функции (значение_2). Все аргументы функции IIF являются обязательными. Нахождение максимального значения двух переменных с использованием функции IIF будет выглядеть:

BIG = IIf (A>B, A, B)

Если A>B, то переменной BIG будет присвоено значение A, а иначе - значение переменной B.

42