Тема 4.4
Программирование алгоритмов
разветвляющихся структур
Программирование на основе событий
Программные проекты, которые были рассмотрены в предыдущих темах, перед тем как выполнить какие-либо вычисления (действия), ожидали реакции пользователя приложения, и только затем обрабатывали эти действия. Эта методология известна как программирование на основе событий. При создании программного проекта, создается группа объектов, которые знают, как реагировать на попытки пользователя приложения взаимодействовать с ними, а затем команды программного проекта обрабатывают ввод с помощью процедур событий, связанных с этими объектами.
События также могут поступать из самого компьютера. Например, программа может получать уведомление о том, что получено сообщение электронной почты, или о том, что по системным часам прошел некоторый период времени. Эти события генерирует компьютер, а не пользователь. Независимо от того, как генерируется событие, VBреагирует на него, вызывая процедуру события, которая ассоциируется с объектом, распознающим это событие. До сих пор мы, в основном, имели дело с событиями Click. Однако объекты VB также могут реагировать на множество других событий.
|
|
Привязка к событиям в VB означает, что большинство вычислений, производимых программой, выполняется в процедурах событий.
Каждый объект в VB имеет предопределенный набор событий, на которые он может реагировать. Список этих событий можно увидеть, если в Имя класса в верхней части окна Редактора кода выделить имя объекта, а затем щелкнуть на стрелке Имя метода. Необходимо отметить, что события визуально идентифицируются по пиктограмме в форме молнии, добавляемой VS к их именам. Можно написать процедуру события для любого из этих событий и, если это событие в программе произойдет, VBвыполнит процедуру события, ассоциированную с ним. Например, объект списка поддерживает более 60 событий, в том числе Click, DoubleClick, DragDrop, DragOver, GotFocus. Обычно в приложениях не потребуется писать программный код более чем для трех или четырех из этих событий, но при создании элементов интерфейса следует знать, что есть такой большой выбор.
Однако, наряду с внешними событиями по отношению к программному коду процедур пользователя, необходимо иметь программные средства для сравнения переменных, свойств и значений, а также те средства, которые в соответствии с результатом этого сравнения могут выполнить один или несколько операторов. Такими средствами в VBявляются операторы языка программирования – оператор условного перехода.
4.4.2. Средства программирования
разветвляющихся структур
|
|
Разветвляющимися алгоритмическими структурами называются такие структуры, в которых порядок выполнения блоков операторов определяется значениями логических выражений. Разветвляющийся алгоритм может состоять из нескольких ветвей, каждая из которых может содержать любую, сколь угодно сложную, алгоритмическую структуру. В процессе работы разветвляющегося алгоритма в первую очередь вычисляются логические выражения L (частным случаем логического выражения является логическая переменная или константа). Если результат вычисления логического выражения принимает значение True (Истина), то выполняется часть алгоритма, расположенная по ветви «Да», если значение – False (Ложь), то – по ветви Нет».
В VBопределен логический тип данных Boolean. Например, описание переменной L:
Dim L As Boolean |
Такая переменная L может иметь одно из двух значений: True или False. Причем при преобразовании числовых типов в логический тип значение 0 преобразуется в False, а все другие значения в 1. Например,
Dim f As Double = 6.8 L = CBool(f) 'в результате L = True f=0 L = CBool(f) 'в результате L = False |
Логическое выражение может быть простым или сложным.
Простое логическое выражение – это два арифметических или строковых выражения, связанных операцией отношения (сравнения).
Операции отношения (сравнения) приведены в табл. 4.4.2-1.
Таблица 4.4.2-1
Операции отношения | Значение |
= | Равно |
< | Меньше, чем |
> | Больше, чем |
<= | Меньше или равно |
>= | Больше или равно |
<> | Не равно |
В таблице 4.4.2-2 приведены простые логических выражения.
Таблица 4.4.2-2
Логическое выражение | Результат |
5 < 10 | True, так как 5 меньше 10 |
5 > 10 | False,так как 5 не больше 10 |
7 <> 3 | True, так как 7 не равно 3 |
X > 45 | True, если X больше 45; в противном случае False |
TextBox1.Text="Stop" | True, если в первом текстовом поле содержится слово "Stop"; в противном случае False |
5 - 1 > 1 + 2 | True,так как первой вычисляется разность 5-1 (4), затем вычисляется сумма 1+2 (3) и наконец, проверяется условие 4 > 3, т.е. 4 больше 3 |
X >= y + z | True,если X больше или равно сумме значений переменных y и z; в противном случае False |
В отличие от арифметических операций, все операции сравнения имеют одинаковый приоритет, т.е., при наличии в логическом выражении нескольких операций сравнения проверяться условия будут в порядке их записи слева направо.
Кроме того, приоритет операций отношения ниже, чем приоритет арифметических операций, поэтому операции сравнения в табл. 4.4.2-3 выполняются после арифметических операций.
Например, выражение Not 7 < 9 всегда принимает значение False, а
4 > 3 And 7 < 9 принимает значение True.
В табл.4.4.2-4 приведено описание логических операций (таблица истинности). Здесь T (True) «Истина», а F (False) – «Ложь».
Разветвляющиеся алгоритмические структуры (рис. В.3-5–В.3-8) в языках программирования реализуются операторами условного перехода.
В VBдля реализации разветвляющихся алгоритмических структур используются три типа операторов: однострочный If, блочный If и оператор выбора Select Case.
Таблица 4.4.2-3
Логические операции | Значение |
Not | Преобразует значение True в False и наоборот – False в True |
And | Для того чтобы сложное условие было истинным, истинными должны быть все входящие в его состав условия |
Or | Сложное условие истинно, если истинно хотя бы одно из составляющих его условий |
Xor | Для того чтобы сложное условие было истинным, истинным должно быть только одно из его составляющих |
Таблица 4.4.2-4
Значения операндов | Not x | X And y | X Or y | x Xor y | |
X | Y | ||||
T | T | F | T | T | F |
T | F | F | F | T | T |
F | T | T | F | T | T |
F | F | T | F | F | F |
Однострочный оператор If имеет следующий формат:
If L Then оператор(ы) [Else оператор(ы) ] |
|
|
Порядок выполнения конструкции следующий: если значение логического выражения L равно True, то выполняется оператор (или операторы, отделенные друг от друга двоеточием), стоящий после Then, в противном случае выполняются операторы, стоящие после Else. В операторе If конструкция Else может отсутствовать (в формате она взята в квадратные скобки), такое разветвление называется усеченным.
Особенностью однострочного оператора If является то, что он должен располагаться в одной строке программы.
Приведем примеры записи однострочного оператора If:
If x > 0 Then y = Sqrt(x) Else y = 1 If d=>10 Then epsilon = 0.001 If lambda < 1 Or beta = 3 Then lambda = beta: x = 0 If x < 10 Then y = 1 Else If x < 100 Then y = 2 Else y = 4 |
Если запись оператора не умещается в пределах экрана, а также при программировании вложенных разветвлений, используется многострочный оператор (блочный оператор) If. Он имеет следующий формат:
If L1 Then [ блок_операторов_1 ] [ElseIf L2 Then [ блок_операторов_2 ]... Else [ блок_операторов_n ] ] End If |
Порядок и правила выполнения конструкции многострочого оператора If следующий:
· если значение L1 равно True, то выполняется блок_операторов_1 и далее управление передается оператору, следующему после End If.
· если значение L1 равно False, то проверяется значение следующего выражения и так далее.
· после выполнения любого блока оператора If управление передается оператору, следующему после End If.
· оператор If может содержать несколько конструкций типа ElseIf.
· блок операторов, следующий за словом Else, выполняется в том случае, если последовательные проверки всех выражений выше имеют значение False.
· конструкции ElseIf и Else могут отсутствовать, что и отмечается в синтаксисе оператора квадратными скобками.
· в многострочном операторе If слово Then должно быть последним в строке, а слово Else – единственным.
· слово ElseIf записывается слитно, а слова End If – через пробел.
Примеры блочных операторов If:
If x>0 Then y =Sqrt(x) z=1+y p=4 End If | If x < 10 Then y=1 Else y=2 z=4 End If |
Считается хорошим тоном выделять структуру операторов отступами, как это сделано в приведенных выше примерах. Это сделает программы «читабельными», т.е. в них будет легче разобраться.
|
|