Пиши Дома Нужные Работы

Обратная связь

Примеры использования оператора присваивания

Фрагмент текста программы Результат
Sub q() Const pi = 3.14 Dim a%, b!, c#, d As Boolean Dim e As Date, f$ a = 1 / 3 b = 1 / 3 c = 1 / 3 d = 1 / 3 e = 1 / 3 f = a & vbCr & b & vbCr & c & _ vbCr & d & vbCr & e & vbCr & pi MsgBox f End Sub
a=1 : b=2 : a=b : b=a a=2 b=2
a=1 : b=2 : a=a+b : b=a*b a=3 b=6
a=1 : b=2 : a=a+b : b=a : a=a=a a=-1(True) b=3
c=a : a=b : b=c a и b меняются значениями
6 * a=a+b : b=a-b : a=a-b a и b меняются значениями
7 * a=y*2 : y=y/x : x=x*x : x=x+y+a x=x*x+y/x+y*2

 

Более подробных комментариев заслуживает пример 1 из таблицы 21. Оператор присваивания здесь задаёт значения переменных a, b, c, d, e, f. Оператор SubEnd Sub задаёт описание подпрограммы-процедуры с именем q, внедрённой в данный электронный документ и запускаемой нажатием следующей кнопки .

Примечание: предполагается, что параметры безопасности Microsoft Office Word разрешают запуск макросов (активного содержимого). Более подробные сведения о выполнении программ в среде VBA можно получить, изучая справочную систему, соответствующую учебную литературу [14], а также выполняя задания лабораторного практикума и делая соответствующие выводы [19, 23].

Оператор Const задаёт значение константы pi, а оператор Dim объявляет переменные, причём все они относятся к разным типам (см. табл. 17). Именно поэтому присваивание разным переменным значения одного и того же выражения приводит к получению совершенно различных результатов.

В операторе, задающем значение строковой переменной f, использованы предопределённые константы vbCr, обозначающие непечатаемый символ возврата каретки – переход на новую строку. Поэтому на экране значение переменной f отображается не в одну, а в несколько строк. Символ подчёркивания в этом же выражении играет аналогичную роль в синтаксисе программы, позволяя продолжить запись текущего оператора со следующей строки.



В качестве оператора, отображающего на экране в окне сообщения значение переменной f, выступает функция MsgBox.

Достаточно простые примеры 2 и 3 позволяют лучше понять работу оператора присваивания и заодно закрепить понятие переменной. Особенность примера 4 заключается в последнем операторе a=a=a. Здесь второй знак равенства означает не присваивание, а сравнение, результатом которого в данном случае будет логическое значение «Истина», которому соответствует число -1.

В примерах 5 и 6 выполняется обмен значениями двух переменных а и b, причём в примере 5 это делается с помощью третьей переменной с, а в примере 6* демонстрируется один из способов, не требующих использования дополнительной переменной. Последовательность операторов присваивания в примере 7* эквивалентна вычислению выражения, содержащего несколько операций.

 

11.2 Условный оператор IF … THEN

 

Далеко не всякий алгоритм можно описать только линейными структурами. Условный оператор позволяет реализовать алгоритмическую структуру «Ветвление», показанную на рисунке 11.1, и выполнить нужный вариант вычислений из двух (или более) предусмотренных в зависимости от выполнения некоторых условий (логических выражений).

 

Рис. 11.1. Базовая алгоритмическая структура «Ветвление»

 

Для реализации структуры «Ветвление» (Если – То – Иначе) и её частного случая «обход» (Если – То) в VBA используется так называемый строчный вид оператора IF … THEN. Его синтаксис имеет следующий вид:

 

IFусловие THENоператоры_А [ELSEоператоры_В]

 

В качестве условия (англ. condition) может выступать любое выражение, значение которого расценивается как истина (не ноль) или ложь (ноль). А в качестве операторов А и В – один или несколько, разделённых двоеточиями, операторов. Если опустить часть оператора в квадратных скобках, то будет реализована структура «обход». Приведём пример использования оператора IF … THEN, в котором можно обойтись без комментариев:

 

IFрейтинг < 60 THENитог = «незачёт» ELSEитог = «зачёт»

 

Блочный вид оператора IF … THEN позволяет, кроме того, реализовать более сложное вложенное ветвление. Синтаксис этого оператора имеет следующий вид:

 

IF условие_1 THEN

[блок_операторов_1]

[ELSEIF условие_2 THEN

[блок_операторов_2]]

[ELSE

[блок_операторов_иначе]]

END IF

 

В отличие от строчной, блочная форма оператораIF … THEN допускает использование нескольких условий, после каждого из которых следует (необязательный) блок операторов, выполняющийся только в случае истинности соответствующего выражения. Следующее условие проверяется только в случае ложности предыдущего. В случае же истинности одного из условий (и последующего выполнения соответствующего блока операторов) никакие дальнейшие условия блочного оператора IF … THEN уже не проверяются, а выполнение программы продолжается с оператора, следующего за ключевым словом END IF.

Исчерпывающее рассмотрение базовой управляющей алгоритмической структуры «Ветвление» даётся в практикуме [20]. Мы же ограничимся приведением ещё одного примера, комментарии к которому могут быть составлены заинтересованным читателем самостоятельно:

 

IF рейтинг < 55 THEN

итог = «неудовлетворительно»

ELSEIF рейтинг < 70 THEN

итог = «удовлетворительно»

ELSEIF рейтинг < 85 THEN

итог = «хорошо»

ELSE

итог = «отлично»

END IF

 

11.3 Оператор выбора варианта *

 

Разновидность структуры «ветвление» – выбор одного из нескольких блоков – показана на рисунке 11.2. Реализуется эта структура оператором выбора варианта SELECT CASE … END SELECT. Логика работы оператора выбора очень похожа на блочную форму оператораIF … THEN. Также выполняется только один из нескольких блоков операторов (вычислительных процессов). Отличие заключается в том, что все условия выбора связаны с проверкой значения одного общего тест-выражения, а в условиях оператораIF … THEN могут проверяться совершенно независимые значения.

 

Рис. 11.2. Структура «выбор»

 

Приведём синтаксис оператора SELECT CASE … END SELECT, который выполняет один из нескольких блоков операторов (на рис. 11.2 – процессов) в зависимости от значения тест-выражения:

 

SELECT CASE тест_выражение

CASE список_выражений_1

[блок_операторов_1]

[CASE список_выражений_2

[блок_операторов_2]]

[CASE ELSE

[блок_операторов_иначе]]

END SELECT

 

В качестве тест-выражения может выступать любое числовое или даже строковое выражение. А выбор блока операторов осуществляется последовательным сравнением значения тест-выражения со списками выражений, которые могут содержать один или более разделённых запятыми элементов, каждый из которых относится к одному из трёх видов: выражение, определяющее единственное значение; пара выражений, разделённых ключевым словом и определяющая ограниченный значениями этой пары диапазон; выражение, начинающееся с ключевого слова IS и следующего за ним знака операции отношения (сравнения), также определяющее соответствующий диапазон.

Работу оператора SELECT CASE … END SELECT можно проиллюстрировать на примере следующего фрагмента программы, запускаемой щелчком по кнопке и выполняющей пересчёт рейтинговой оценки из стобалльной шкалы в четырёхбалльную:

 

Select Case Rating' тест-выражение

Case Is< 0, Is > 100 ' выбор по списку_выражений

txtОценка.Value = "Вне диапазона"

Case Is >= 85 ' "Отлично", если Rating>= 85

txtОценка.Value = "Отлично"

Case70 To 85 ' "Хорошо", если Ratingв диапазоне 70 – 85

txtОценка.Value = "Хорошо"

Case Is >= 55 ' не хорошо, но вполне удовлетворительно

txtОценка.Value = "Удовлетворительно"

Case Else ' иначе – всё, что осталось…

txtОценка.Value = "Неудовлетворительно"

End Select

Результат выполнения программы при значении тест-выражения равном 77 представлен на рисунке 11.3.

 

 

Рис. 11.3. Форма с результатом для примера 2

 

Забегая немного вперёд и используя терминологию объектно-ориентированного программирования, поясним, что идентификатор txtОценка.Value в приведённом фрагменте означает содержимое текстового поля (значение свойства Value объекта TextBox с именем txtОценка). Текстовые поля и другие объекты-элементы управления (метки – Label, командная кнопка – CommandButton, рисунок – Image) размещены на форме пользователя (объект UserForm с именем Пример2_Select)

 

Операторы цикла

 

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

На рисунке 11.4 показаны блок-схемы циклических алгоритмических структур с предусловием (Цикл-Пока) и с постусловием (Цикл-До). Напомним, что их различие заключается в том, что действие (процесс) в зависимости от истинности условия в первой схеме может не выполниться ни разу, а во второй – выполняется не менее одного раза.

 

 

Рис. 11.4. Циклические алгоритмические структуры

 

Для реализации цикла с предусловием в VBA может использоваться оператор WHILE … WEND и более универсальный оператор DO … LOOP (см. *), с помощью которого можно реализовать также и цикл с постусловием.

 

Программный код примера 3 на алгоритмическом языке VBA

 

Private Sub cmdStart_Click()

Dim I As Integer

I = 0

txtIn.Value = I

Do While I < 10

I = I + 1

Loop

txtIk.Value = I

End Sub

 

Результат выполнения программного кода цикла с предусловием с использованием универсального оператора цикла DO … LOOP представлен на рисунке 11.5. Фрагмент программного кода данного примера отображается на форме внутри элемента управления типа Label (метка).

 

 

Рис. 11.5. Форма для примера 3 (Цикл-Пока)

 

Для реализации так называемого цикла со счётчиком (с параметром) используется оператор FOR … NEXT (см. ). Блок-схема соответствующей алгоритмической структуры показана на рисунке 11.6. По сути, это частный случай цикла с предусловием. При этом действие, изменяющее значение счётчика с заданным шагом, вынесено из тела цикла непосредственно в заголовок (символ подготовки).

 

Рис. 11.6. Цикл с параметром

Фрагмент программного кода для примера 4 на языке VBA

Dim strY As String * 15

Dim strX As String * 7

Dim I As Integer

Rad = Atn(1) * 4/180 'коэффициент для перевода градусной меры угла в радианы

I = 0

For x = -180 To 180 Step 10

I = I + 1

strI = I

strX = x

ModX = Abs(x)

If ModX>89 And ModX<91 Or ModX>269 _

And ModX<271 Then

strY = "-Нет решения"

Else

Y = b ^ sin(a ^ 2) / cos(x * Rad) - d

strY = Y

End If

lbxТабуляция.AddItem strI + "| " + _

strX + "| " + strY

Next x

 

Результаты выполнения программного кода цикла с параметром с использованием оператора цикла FOR … NEXT представлены на рисунке 11.7.

 

Рис. 11.7. Форма (Пример 4) с результатом работы цикла с параметром

 

Кроме того *, в VBA имеется очень похожий на цикл со счётчиком оператор For Each … Next, который повторяет тело цикла для каждого элемента массива или коллекции объектов. При работе с коллекциями (наборами однотипных объектов) количество элементов может быть неизвестно, а концепция начального и конечного значений – не иметь смысла. В таких случаях использование цикла For Each … Next является наиболее предпочтительным.

 

11.5 Оператор цикла FOR … NEXT

 

Оператор цикла FOR … NEXT используется, когда число повторений заранее известно, и определяется оно значениями счётчика (параметра) цикла: начальным, конечным и шагом (приращением). Оператор имеет следующий синтаксис:

 

FOR переменная_цикла = начало TO конец [STEP приращение]

[блок_операторов]

[EXIT FOR]

NEXT [переменная_цикла [,переменная_цикла]...]

 

Здесь переменная_цикла – числовая переменная, используемая как счетчик или параметр цикла; начало и конец – выражения, задающие начальное и границу конечного значения переменной цикла; приращение – значение, прибавляемое к переменной цикла при каждом следующем шаге цикла. Если необязательная часть оператора (STEP приращение) не указывается, то приращение принимается равным единице. Количество повторений тела цикла FOR … NEXT определяется целым (без округления!) числом, определяемым формулой (конец – начало) / приращение + 1.

Тело цикла может содержать любую последовательность вложенных алгоритмических структур, имеющих один вход и один выход, в том числе и вложенные циклы. Синтаксис оператора предусматривает также досрочный выход из цикла (EXIT FOR) *.

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

Рассмотрим работу оператора FOR … NEXT на примере следующего фрагмента программы:

 

ForI= Старт To Стоп

lsbРезультат.AddItem I

NextI

Щелчок по кнопке позволяет вызвать форму (рис. 5), на которой можно указать начальное (Старт) и конечное (Стоп) значения счётчика и увидеть соответствующий результат выполнения программы.

 

Программный код примера 5 на алгоритмическом языке VBA

 

Private Sub cmbStart_Click()

Dim I As Integer

Dim Старт As Integer

Dim Стоп As Integer

Старт = txtIstart.Value

Стоп = txtIstop.Value

For I = Старт To Стоп

lsbРезультат.AddItem I

Next I

lblВывод.Caption = "* Значение счётчика по завершении цикла ="& I

End Sub

 

Так, при Старт=1 и Стоп=5 тело цикла выполнится пять раз, при этом переменная I (счётчик) будет изменять своё значение от одного до пяти включительно с шагом, равным единице (поскольку STEP не указан). Тело цикла состоит всего из одной строки, предписывающей объекту lsbРезультат (элемент управления, отображающий список) выполнить метод AddItem (добавить элемент в список), причём в качестве добавляемой строки выступает текущее значение счётчика I, которое на каждом шаге меняется. В результате можно получить вид, представленный на рисунке 11.8.

 

 

Рис. 11.8. Форма (Пример 5) с результатом работы цикла.

 

Для более глубокого понимания работы оператора FOR … NEXT рекомендуется повторить выполнение предложенного примера с другими значениями Старт и Стоп. Ещё лучше выполнить предложенную программу в пошаговом режиме (запуск из меню редактора VBA: Debug – Step Into), в котором очередной выполняемый оператор подсвечивается, ожидая команды продолжения (нажатия F8), а зависание указателя мыши на имени переменной позволяет отобразить её текущее значение.

Оператор FOR … NEXT часто используется при обработке массивов. Например, для одномерного массива можно организовать цикл, используя Счётчик, изменяющийся от значения нижней границы индекса массива Старт до верхней Стоп. Такой цикл выполнится столько же раз, сколько в массиве имеется элементов. Если в теле цикла при обращении к элементу массива использовать в качестве указателя индекса идентификатор Счётчик, то таким образом можно осуществлять поэлементный перебор всего массива [21, 22].

 

Математические функции

 

Набор математических функций для языка VBA достаточно стандартный (по сравнению, например, с Паскалем). Основные из них представлены в Таблице 22, где вместо указанного в скобках параметра (аргумента) х может выступать числовое выражение. Для тригонометрических функций угол выражается в радианах.

Таблица 22






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.