Средства программирования разветвляющихся структур
Тема 4.4
Алгоритмы разветвляющихся структур
Программирование на основе событий
Средства программирования разветвляющихся структур
Базовые алгоритмы разветвляющихся структур и примеры их программирование
Тестовые задания
4.4.5. Лабораторная работа по теме «Программирование алгоритмов разветвляющихся структур»
Вопросы, подлежащие изучению
Общее задание на разработку проекта
Варианты индивидуальных заданий
Программирование на основе событий
Программные проекты, которые были рассмотрены в предыдущих темах, перед тем как выполнить какие-либо вычисления (действия), ожидали реакции пользователя приложения, и только затем обрабатывали эти действия. Эта методология известна как программирование на основе событий. При создании программного проекта, создается группа объектов, которые знают, как реагировать на попытки пользователя приложения взаимодействовать с ними, а затем команды программного проекта обрабатывают ввод с помощью процедур событий, связанных с этими объектами.
События также могут поступать из самого компьютера. Например, программа может получать уведомление о том, что получено сообщение электронной почты, или о том, что по системным часам прошел некоторый период времени. Эти события генерирует компьютер, а не пользователь. Независимо от того, как генерируется событие, VBреагирует на него, вызывая процедуру события, которая ассоциируется с объектом, распознающим это событие. До сих пор мы, в основном, имели дело с событиями Click. Однако объекты VB также могут реагировать на множество других событий.
Привязка к событиям в VB означает, что большинство вычислений, производимых программой, выполняется в процедурах событий.
Каждый объект в VB имеет предопределенный набор событий, на которые он может реагировать. Список этих событий можно увидеть, если в Имя класса в верхней части окна Редактора кодавыделить имя объекта, а затем щелкнуть на стрелке Имя метода. Необходимо отметить, что события визуально идентифицируются по пиктограмме в форме молнии, добавляемой VS к их именам. Можно написать процедуру события для любого из этих событий и, если это событие в программе произойдет, VBвыполнит процедуру события, ассоциированную с ним. Например, объект списка поддерживает более 60 событий, в том числе Click, DoubleClick, DragDrop, DragOver, GotFocus. Обычно в приложениях не потребуется писать программный код более чем для трех или четырех из этих событий, но при создании элементов интерфейса следует знать, что есть такой большой выбор.
Однако, наряду с внешними событиями по отношению к программному коду процедур пользователя, необходимо иметь программные средства для сравнения переменных, свойств и значений, а также те средства, которые в соответствии с результатом этого сравнения могут выполнить один или несколько операторов. Такими средствами в VBявляются операторы языка программирования – оператор условного перехода.
Средства программирования разветвляющихся структур
Разветвляющимися алгоритмическими структурами называются такие структуры, в которых порядок выполнения блоков операторов определяется значениями логических выражений. Разветвляющийся алгоритм может состоять из нескольких ветвей, каждая из которых может содержать любую, сколь угодно сложную, алгоритмическую структуру. В процессе работы разветвляющегося алгоритма в первую очередь вычисляются логические выражения 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 |
Считается хорошим тоном выделять структуру операторов отступами, как это сделано в приведенных выше примерах. Это сделает программы «читабельными», т.е. в них будет легче разобраться.
Пример 4.4.2-1. Написать процедуры ввода/вывода, которые будут использоваться в алгоритмах разветвляющихся структур.
Требуемыми процедурами являются процедуры vvodDbl1()и
ViodDbl1() ввода и вывода данных типа Double в текстовые поля, процедуры vvodSng3() и vivodSng3() ввода и вывода данных типа Single в текстовые поля и процедуры vvodInt4( ) и vivodInt4( ) ввода и вывода данных типа Integer в текстовые поля.
Процедуры vvodDbl1(), vivodDbl1(), vvodSng3() и vivodSng3() приведены в Теме 4.4.3, а процедуры vvodInt4() и vivodInt4() представлены на рис. 4.4.2-1 и 4.4.2-2.
'процедура-Function ввода данных типа Integer 'из текстового поля TextBox Function vvodInt4(ByVal T As TextBox) As Integer Return CInt(T.Text) End Function |
Рис. 4.4.2-1. Процедура ввода данных типа Integer из поля TextBox
'Процедура-Sub вывода данных типа Integer в TextBox Sub vivodInt4(ByVal Z As Integer, ByVal T As TextBox) T.Text = CStr(Z) End Sub |
Рис. 4.4.2-2. Процедура вывода данных типа Integer в TextBox