КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Операции сравнения
В логических операциях не только результат, но и операнды имеют тип Boolean. Поясним назначение таких операций на простом примере. Пусть переменная типа Boolean с именем R должна принимать значение True, если точка с координатами X,Y попадает в прямоугольную область, ограниченную координатами X1,X2 и Y1,Y2. Если точка за пределами прямоугольника, то R=False. Применив логическую операцию AND (И), вычислим значение R. R = (X>=X1) AND (X<=X2) AND (Y>=Y1) AND (Y<=Y2) Смысл этой операции в том, что если и первое выражение (X больше или равно X1) истинно, и второе истинно, и третье истинно, и четвертое истинно, то R=True. Если один из операндов логической операции AND представляет собой ложное выражение (утверждение), то и результатом будет False. Кроме операции AND, к числу часто используемых логических операций относятся OR и NOT. Первая из них дает результат True, если истинно хотя бы одно выражение, являющееся операндом. Операция NOT изменяет результат на противоположный, подобно смене знака в арифметическом выражении. Вычислим R с помощью этих операций. R = NOT ((X<X1) OR (X>X2) OR (Y<Y1) OR (Y>Y2)) Выражение, стоящее в скобках после операции NOT, истинно (True), если точка или левее, или правее, или ниже, или выше воображаемого прямоугольника, т. е. если точка в него не попала. В этом случае R будет иметь значение False благодаря логическому отрицанию NOT. Несколько реже используются логические операции XOR (исключающее ИЛИ), EQV (эквивалентность) и IMP (импликация). Первая из них дает результат True, если только одно из выражений-операндов имеет результат True. Результатом операции EQV будет True, если выражения-операнды дают одинаковый результат. Результатом IMP будет FALSE только в одном случае – при первом операнде, имеющем значение TRUE, второй операнд имеет значение False, например, при правильной посылке получен неверный вывод. Перейдем теперь ко второй, важнейшей в любом языке программирования, группе инструкций. Это инструкции проверки условий и организации циклов. Все они позволяютуправлять последовательностью исполнения инструкций в программе. Инструкция IF (ЕСЛИ) используется в двух нотациях: в виде простой и блочной структур. Инструкция простой структуры имеет следующую форму записи: If <Выражение> Then <Инструкция, исполняемая, если выражение-условие истинно> Конструкция блочной структуры может включать один блок инструкций (<Блок 1>), исполняемых, если выражение 1 истинно, или же еще дополнительные условия, сопровождаемые блоками инструкций. If <Выражение1> Then <Блок 1 – исполняется, если выражение 1 истинно> ElseIf <Выражение2> Then <Блок 2 – исполняется, если выражение 2 истинно > ElseIf <Выражение3> Then <Блок 3 – исполняется, если выражение 3 истинно > ………………….. Else <Блок инструкций, исполняемых, если ложны выражения в инструкциях If и ElseIf> End If Приведем пример простой инструкции If. If R Then MsgBox "Точка попала в прямоугольник" Теперь пример блочной структуры. R = False If X < X1 Then GoTo 10 ’уже ясно, что точка не попала в прямоугольник ElseIf X > X2 Then GoTo 10 ‘управление передается на метку 10 ElseIf Y < Y1 Then GoTo 10 ElseIf Y > Y2 Then GoTo 10 Else R = True End If 10: MsgBox R ’после метки ставится двоеточие Блоки ElseIf и (или) Else могут отсутствовать. В любом случае блочная конструкция оканчивается инструкцией End If. Приведенный пример, кроме блочной конструкции IF, поясняет возможность использования в программе меток и передач управления с помощью инструкции GoTo. Метка не обязательно обозначается числом – можно было написать и N10 или MsgR. В ситуациях, когда требуется запрограммировать три и более разветвлений в зависимости от значения одной переменной, удобно использовать структуру Select Case. Select Case <Переменная> Case <Значение 1> либо Case is <Условие 1> <Блок 1 – выполняется, если значение переменной равно значению 1 или соответствует условию 1> Case <Значение 2> либо Case is <Условие 2> <Блок 2 – выполняется, если значение переменной равно значению 2 или соответствует условию 2> …………………. End Select Приведем пример. Возраст = TextBox1.Value Select Case Возраст Case Is < 13 Label1.Caption = "После 22-00 спать !" Case 16 Label1.Caption = "Пора получать паспорт" Case Is < 18 Label1.Caption = "Только чай !" Case Is >= 18 Label1.Caption = "Можно почти все!" End Select Теперь рассмотрим организацию циклов. Вообще говоря, цикл нетрудно организовать и без специальных инструкций по схеме: 1) инструкции присваивания начальных значений переменной цикла и другим переменным; 2) инструкции, исполняемые при очередном значении переменной цикла; 3) наращивание (изменение) переменной цикла и, возможно, других переменных, изменяемых одновременно с переменной цикла; 4) проверка переменной цикла на соответствие условию, при котором цикл должен исполняться повторно, и передача управления блоку 2 при выполнении этого условия (IF <условие> GoTo <метка в начале блока 2>). Именно такой классический цикл изображен на рис. 4.1 в виде блок-схемы. Но в языках высокого уровня, и в том числе в VBA, предусмотрены инструкции, позволяющие записывать циклы еще компактнее. Проще всего цикл записывается, если известны начальное, конечное значения переменной цикла и шаг ее изменения. Пусть в J-м столбце на листе Excel надо суммировать четные ячейки до строки 20, но только пока не встретится число 7777. J = 1: S = 0 For I = 2 To 20 Step 2 F = Cells(I, J).Value If F = 7777 Then Exit For 'Выход из цикла – на инструкцию после Next S = S + F Next I MsgBox "i= " & Str(I-2) & " S=" & Str(S) После выхода из цикла сообщается номер последней ячейки, значение которой добавлено к S, и сама накопленная сумма. Цикл этого примера называют циклом типа For-Next. В большинстве случаев циклы этого типа выглядят проще, так как обычно не требуется задавать шаг изменения переменной цикла (Step) и не нужно выходить из цикла по дополнительному условию (Exit For). В модуле, приведенном после рис. 10.5 (см. подраздел 10.4), такие циклы используются в процедурах TabCXCY и TabA. В последней процедуре – вложенный (двойной) цикл. В тех случаях, когда нет возможности указать начальное и конечное значения переменной цикла, используют циклы типа Do-Loop. Для таких циклов возможны 4 варианта записи:
Циклы такого типа уже неоднократно применялись в примерах процедур в подразделах 10.3, 10.4. В число инструкций, исполняемых в цикле, может быть включена инструкция Exit Do, если из цикла надо выйти «досрочно», например, при выполнении какого-нибудь дополнительного условия. Заметим, что Do While означает Выполнять пока… Do Until означает Выполнять пока не… Другими словами, вместо Do Until можно написать Do While Not. В некоторых случаях эти проверки удобнее ставить в конец цикла (Loop – цикл, дословно – петля). В заключительной части этого раздела приведем рекомендации по отладке приложений. Во-первых, для отладки надо подбирать разнообразные примеры, не ограничиваясь самыми простыми – ведь многие ошибки проявляются только при определенных значениях исходных данных, а иногда даже только при определенных сочетаниях этих значений. Во-вторых, для просмотра промежуточных и окончательных значений переменных можно на время отладки включать в тексты процедур обращения к процедуре MsgBox, а также выводить значения переменных в виде свойства Caption элемента управления Label (метка – статический текст) или в виде свойства Text элемента управления TextBox (поле с редактируемым текстом). Важную роль играет выбор точек процедуры для вывода значений переменных при отладке. Для выбора таких точек можно рекомендовать рассматривать процедуру состоящей из логически завершенных фрагментов программного кода, формирующих определенные «информационные сцены». Эти-то сцены, характеризующиеся содержимым переменных и массивов, и надо контролировать. В-третьих, VBA предоставляет специальные средства для отладки процедур. Если в окне редактора слева от текста инструкции (на полях) щелкнуть мышью, то создастся точка останова. При этом инструкция выделится красным цветом. Теперь переключаемся через панель задач на окно Excel и запускаем процедуру (обычно – командной кнопкой). В точке останова выполнение программы приостановится, причем произойдет переключение на окно редактора Visual Basic, а очередная инструкция будет выделена желтым цветом. Теперь можно навести мышь на любую переменную (на ее имя в любой инструкции), и появится окошечко со значением этой переменной в момент останова. Далее можно установить курсор в следующую представляющую интерес позицию модуля и нажать Ctrl+F8 – программа выполнится до этой позиции и снова приостановится. Можно снова «посмотреть» значения переменных, наводя на них мышь. Есть также возможность перейти к пошаговому исполнению инструкций, пользуясь клавишей F8 или комбинациями клавиш Shift+F8 (шаг с обходом вызываемой процедуры) и Shift+Ctrl+F8 (шаг с выходом из процедуры – см. также пункт меню Отладка). Таким образом, современные среды визуального программирования предельно облегчают отладку программ. Контрольные вопросы и задания к главе 10 1. Понятие программирования. 2. Особенности и достоинства VBA. 3. Создание интерфейса пользователя: размещение элементов управления на листе Excel, установка свойств, переход в окно редактора VBA, создание диалоговых окон. 4. Понятие модуля, процедуры, функции. Оформление и вызов процедуры. Оформление и вызов функции. Категории встроенных функций. 5. Встроенные типы данных VBA. 6. Назначение переменных, их описание, локальные и глобальные переменные. 7. Назначение инструкции Option Explicit. 8. Массивы, их описание, доступ к элементам массива, многомерные массивы, динамическое переопределение размерности массивов. 9. Связь математических понятий вектора и матрицы с понятиями одномерного и двумерного массивов в программировании. 10. Конструирование собственных типов данных. 11. Константы, их определение и использование. 12. Доступ к данным, хранимым в виде свойств объектов-элементов управления. 13. Основные группы инструкций языка Visual Basic. 14. Инструкция присваивания. 15. Арифметические операции. Операции сравнения. Логические операции. 16. Инструкции проверки условий и организации циклов. 17. Методы отладки приложений.
|