- •«Технология создания программных продуктов»
- •6.040303 «Системный анализ»
- •«Технология создания программных продуктов»
- •6.040303 «Системный анализ»
- •Модуль I: «Общая характеристика Visual Basic для приложений»
- •Лекция №1 Введение в Visual Basic для приложений (vba)
- •Лекция №2 Элементы кода Visual Basic для приложений (vba)
- •2.2 Инструкции, функции и выражения
- •2.3 Переменные, массивы, типы данных и константы
- •2.3.1 Правила присвоения имен в языке Visual Basic
- •2.3.2 Типы данных
- •2.3.3 Эффективное использование типов данных
- •2.3.4 Описание констант
- •2.3.5 Описание переменных
- •2.3.6 Описание массивов
- •Лекция №3 Циклические и разветвляющиеся вычислительные процессы в vba
- •3.1 Циклы и условные инструкции в программе
- •3.2 Использование циклов для повторения блоков программы
- •3.3 Использование условных инструкций
- •Пример использования метода Print
- •3.5 Преобразование данных
- •3.6 Функции Int и Fix
- •3.7 Генерация случайных чисел
- •Лекция №4 Организация ввода-вывода в vba
- •4.1 Диалоговый ввод - вывод в vba
- •4.2 Принятие решения
- •4.3 Окно ввода
- •4.4 Ввод-вывод при помощи ячеек Excel
- •Лекция №5 Структура кода vba. Процедуры и функции
- •5.1 Структура кода
- •5.2 Использование функций и процедур
- •5.2.1 Вызов функций и процедур
- •5.2.2 Передача именованных аргументов
- •5.2.3 Эффективная передача аргументов в функции и процедуры
- •Лекция №6 Использование объектов в vba
- •6.1 Понятия объектов, свойств, методов, событий
- •6.2 Создание собственных объектов
- •Пример описания объекта
- •Пример использования объекта
- •Модуль II: «Принципы разработки программ пользователя»
- •Лекция №7 Этапы развития технологии создания программ (технология программирования. Основные понятия и подходы)
- •7.1 Технология программирования и основные этапы ее развития
- •Лекция №8 Блочно-иерархический подход к созданию сложных систем
- •8.1 Проблемы разработки сложных программных систем
- •8.2 Блочно-иерархический подход к созданию сложных систем
- •8.3 Информационное моделирование предметной области [1] -с. 543
- •Лекция №9 Последовательность проектирования ис
- •9.2.1 Содержание и цели предпроектного обследования
- •9.2.2 Функциональная структура объекта автоматизации
- •9.2.3 Методы обследования управленческих процедур
- •9.2.4 Исследование потоков и структуры информации
- •9.3 Обоснование и выбор состава автоматизируемых задач [1] -с.518-519
- •9.4.1 Характеристика задачи (комплекса задач)
- •9.4.2 Выходная информация
- •9.4.3 Входная информация
- •9.4.4 Математическое описание
- •9.4.5 Описание алгоритма решения
- •9.4.6 Разработка контрольного примера
- •10.1 Состав процессов жизненного цикла
- •10.2 Основные этапы разработки программного обеспечения
- •Лекция №11 Развитие моделей жизненного цикла программного
- •11.1 Каскадная модель
- •11.2 Модель c промежуточным контролем
- •11.3 Спиральная модель
- •11.4 Использование case-технологий
- •11.5 Ускорение разработки программного обеспечения. Технология rad
- •Лекция №12 Оценка качества процессов создания программного
- •12.1 Серия стандартов iso 9000
- •12.2 Стандарт cmm
- •12.3 Стандарт spice
- •«Технологія створення програмних продуктів» конспект лекцій з дисципліни
- •6.040303 «Системний аналіз»
- •84313, М. Краматорськ, вул. Шкадінова, 72.
2.3.6 Описание массивов
Как и другие переменные, массивы описываются с помощью инструкций Dim, Static, Private или Public. Разница между скалярными переменными (т.е. не массивами) и массивами состоит в том, что для последних надо указывать размер массива. Массив с заданным размером называется массивом фиксированного размера. Массив с переменным размером называется динамическим. Начало индексации массива с 0 или 1 определяется параметрами инструкции Option Base. Если не указано Option Base 1, нижняя граница индексов массива равняется нулю.
Описание массива фиксированного размера
В следующей строке программы массив фиксированного размера описывается как массив типа Integer, имеющий 11 строк и 11 столбцов:
Dim MyArray(10, 10) As Integer
Первый аргумент представляет строки, а второй - столбцы.
Как и при описании других переменных, если тип данных при описании массива не задается, подразумевается, что элементы массива имеют тип Variant. Максимальные размеры массива варьируются в зависимости от имеющейся операционной системы и доступной памяти.
Описание динамического массива
Если массив описан как динамический, можно изменять его размер во время работы программы. Для описания динамического массива используются инструкции Static, Dim, Private, или Public с пустыми скобками.
Dim sngArray() As Single
Примечание. Можно воспользоваться инструкцией ReDim для неявного описания массива внутри процедуры. При этом надо точно задавать имя массива. В случае опечатки, даже если в модуле есть инструкция Option Explicit, будет создан второй массив.
В процедуре внутри области определения массива используется инструкция ReDim для изменения числа размерностей, определения числа элементов и задания верхних и нижних границ индексов для каждой размерности. Инструкцию ReDim можно применять для изменения динамического массива необходимое число раз. Однако при каждом применении данные, содержащиеся в массиве, теряются. Инструкция ReDim Preserve увеличивает размер массива, сохраняя при этом содержимое. В примере показано, как можно увеличить массив varArray на 10 элементов без уничтожения текущих значений элементов.
ReDim Preserve varArray(UBound(varArray) + 10)
Примечание. Использование ключевого слова Preserve вместе с динамическим массивом позволяет изменить только верхнюю границу последней размерности массива, однако изменение числа размерностей невозможно.
Лекция №3 Циклические и разветвляющиеся вычислительные процессы в vba
3.1 Циклы и условные инструкции в программе
Использование условных инструкций и инструкций цикла, называемых также управляющими структурами, позволяет написать программу на Visual Basic, которая будет принимать решения и повторять операции. Другая управляющая структура – инструкция With, позволяет выполнить последовательность инструкций, не повторяя задание имени объекта.
3.2 Использование циклов для повторения блоков программы
Использование циклов дает возможность повторного выполнения набора инструкций. Некоторые циклы повторяют инструкции, пока условие имеет значение False; другие – пока значение условия равно True. Имеются также циклы, которые повторяют набор инструкций определенное число раз или же выполняют его для каждого объекта семейства.
3.2.1 Типы циклов
Do...Loop: повторяет набор инструкций, пока условие имеет значение True или пока оно не примет значение True.
For...Next: использует счетчик. Повторяет набор инструкций указанное число раз.
For Each...Next: повторяет набор инструкций для каждого объекта семейства.
3.2.2 Выполнение нескольких инструкций над одиночным объектом
В Visual Basic, требуется указать объект перед выполнением одного из его методов или изменением одного из его свойств. С помощью инструкции With можно указать объект только один раз для последовательности инструкций. With: выполняет последовательность инструкций над одиночным объектом.
3.2.3 Инструкция Do...Loop
Повторяет выполнение набора инструкций, пока условие имеет значение True или пока оно не примет значение True.
Синтаксис цикла Do с предусловием (проверка выполняется вначале):
Do [{While | Until} <условие>]
[инструкции]
[Exit Do]
[инструкции]
Loop
Допустим также синтаксис с постусловием (проверка выполняется в конце цикла и он хоть один раз, но выполнится в любом случае):
Do
[инструкции]
[Exit Do]
[инструкции]
Loop [{While | Until} <условие>]
Синтаксис инструкции Do Loop содержит следующие элементы:
условие – числовое или строковое выражение, которое имеет значение True или False. Является необязательным. Значение Null рассматривается как значение False;
инструкции – одна или несколько инструкций, выполнение которых повторяется, пока условие имеет значение True или пока оно не приобретет значение True.
В любом месте управляющей структуры Do…Loop может быть размещено любое число инструкций Exit Do, обеспечивающих альтернативные возможности выхода из цикла.
В качестве примера рассмотрим решение следующей задачи. Пусть необходимо рассчитать значения функции Z=ctg(x*a), где х меняется от 0 до π с шагом 0.1*π, а величина a вводится с экрана. При этом нужно предусмотреть ситуацию, когда введенное значение a равно 1 – прекратить расчет функции с выдачей соответствующего сообщения.
Public Sub prim_cikle()
Dim Pi As Single, X As Single, St As Single, Z As Single, a As Single
Pi = 3.142: X = 0: St = 0.1 * Pi
Do While X <= Pi
a = InputBox("Введите значение a")
If a = 1# Then
MsgBox "Ошибка ввода. Прерываем цикл"
Exit Do
Else
Z = Sin(X * a) / Cos(X * a)
End If
Debug.Print a; X; Z
X = X + St
Loop
End Sub
3.2.4 Инструкция For...Next
Повторяет выполнение группы инструкций указанное число раз.
Синтаксис
For <счетчик> = <начало> To <конец> [Step <шаг>]
[инструкции]
[Exit For]
[инструкции]
Next [<счетчик>]
Синтаксис инструкции For…Next содержит следующие элементы:
счетчик – обязательная числовая переменная, используемая в качестве счетчика цикла. Эта переменная не может принадлежать к типу Boolean или быть элементом массива;
начало – начальное значение переменной счетчик; обязательный параметр;
конец – конечное значение переменной счетчик; обязательный параметр;
шаг – значение, на которое изменяется счетчик при каждом выполнении тела цикла, необязательный параметр. По умолчанию шаг равен единице. Аргумент шаг может быть как положительным, так и отрицательным;
инструкции – одна или несколько инструкций между For и Next, которые выполняются указанное число раз; необязательный параметр.
После выполнения всех инструкций цикла значение шаг добавляется к текущему значению переменной счетчик. После этого инструкции цикла либо выполняются еще раз (на основе того же условия, которое привело к начальному выполнению цикла), либо цикл завершается, и выполнение продолжается с инструкции, следующей за инструкцией Next.
Совет. Изменение значения переменной счетчик внутри цикла усложняет чтение и отладку программы.
Альтернативный способ выхода из цикла предоставляет инструкция Exit For. В любых местах цикла может размещаться любое число таких инструкций. Инструкция Exit For часто применяется вместе с проверкой некоторого условия (например, If...Then). Эта инструкция передает управление инструкции, непосредственно следующей за инструкцией Next.
Допускается организация вложенных циклов For...Next (один цикл располагается внутри другого). Счетчик каждого цикла должен иметь уникальное имя. Допускаются следующие конструкции:
For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
...
Next K
Next J
Next I
Примечание. Если опустить переменную счетчик в инструкции Next, выполнение продолжается, как и при ее наличии. При обнаружении инструкции Next до соответствующей инструкции For возникает ошибка.
В качестве примера приведем ту же программу, что и в предшествующем пункте.
Public Sub prim_cikleFOR()
Dim Pi As Single, X As Single, St As Single, Z As Single, a As Single
Dim i As Integer
Pi = 3.142: X = 0: St = 0.1 * Pi
For i = 1 To 10 Step 1
a = InputBox("Введите значение a")
If a = 1# Then
MsgBox "Ошибка ввода. Прерываем цикл"
Exit For
Else
Z = Sin(X * a) / Cos(X * a)
End If
Debug.Print a; X; Z
X = X + St
Next i
End Sub
3.2.5 Инструкция For Each...Next
Повторяет выполнение группы инструкций для каждого элемента массива или семейства.
Синтаксис:
For Each <элемент> In <группа>
[инструкции]
[Exit For]
[инструкции]
Next [<элемент>]
Синтаксис инструкции For...Each...Next содержит следующие элементы:
элемент – переменная, используемая для выполнения итераций по элементам семейства или массива. Обязательный параметр. Для семейств элемент может быть только переменной типа Variant, универсальной объектной переменной или переменной, представляющей любой конкретный объект. Для массивов элемент может быть только переменной типа Variant;
группа – имя семейства объектов или массива (за исключением массивов с определяемыми пользователем типами). Обязательный параметр;
инструкции – одна или несколько инструкций, которые выполняются над каждым элементом группы. Необязательный параметр.
Вход в блок For...Each выполняется только в том случае, если группа содержит хотя бы один элемент. После входа в цикл все инструкции цикла выполняются для первого элемента группы. Затем, если группа содержит другие элементы, инструкции цикла выполняются для каждого элемента. После обработки всех элементов цикл завершается, а выполнение продолжается с инструкции, следующей за инструкцией Next.
В любых местах цикла может размещаться любое число инструкций Exit For, позволяющих выйти из цикла.
Не допускается использование инструкции For...Each...Next с массивами, определяемыми пользователями типов, поскольку значение типа Variant не может содержать тип, определяемый пользователем.
Допускается организация вложенных циклов For...Each...Next.
Примечание. Если опустить элемент в инструкции Next, выполнение продолжается так же, как если бы элемент был указан. При обнаружении инструкции Next до соответствующей инструкции For возникает ошибка.
3.2.6 Инструкция Exit
Завершает выполнение блока программы Do…Loop, For...Next, Function, Sub или Property.
Синтаксис:
Exit Do
Exit For
Exit Function
Exit Property
Exit Sub
Рассмотрим синтаксис инструкции Exit подробнее:
Exit Do - предоставляет способ завершения цикла Do...Loop. Может использоваться только внутри конструкции Do...Loop. Exit Do передает управление инструкции, следующей за инструкцией Loop. При использовании во вложенных циклах Do...Loop инструкция Exit Do передает управление циклу охватывающего уровня по отношению к циклу, в котором она вызывается;
Exit For - предоставляет способ завершения цикла For. Может применяться только в цикле For...Next или For Each...Next. Exit For передает управление инструкции, следующей за инструкцией Next. При использовании во вложенных циклах For инструкция Exit For передает управление циклу охватывающего уровня по отношению к циклу, в котором она вызывается;
Exit Function - немедленно завершает выполнение процедуры Function, в которой появляется эта инструкция. Выполнение продолжается с инструкции, следующей за инструкцией, в которой вызывалась процедура Function;
Exit Property - немедленно завершает выполнение процедуры Property, в которой появляется эта инструкция. Выполнение продолжается с инструкции, следующей за инструкцией, в которой вызывалась процедура Property;
Exit Sub - немедленно завершает выполнение процедуры Sub, в которой появляется эта инструкция. Выполнение продолжается с инструкции, следующей за инструкцией, в которой вызывалась процедура Sub.
Не следует путать инструкции Exit с инструкциями End. Инструкция Exit не определяет конец структуры.
