- •Минобрнауки россии
- •Оглавление
- •Введение
- •1. Лабораторная работа № 1
- •1.1. Создание интерфейса пользователя
- •1.1.1. Основные понятия
- •1.1.2. Редактор vba
- •1.2. Работа с переменными, массивами, константами
- •1.2.1. Основные инструкции языка Visual Basic
- •1.2.3. Создание интерфейса пользователя
- •1.2.4. Окно свойств
- •1.2.4. Меню Edit
- •1.2.5. Меню View
- •1.2.6. Меню Format
- •1.3.1. Пользовательские формы
- •1.3.2. Свойства объекта UserForm
- •1.3.3. Методы объекта UserForm
- •1.3.4. События объекта UserForm
- •1.4. Контрольные вопросы
- •2. Лабораторная работа № 2
- •2.1. Элементы управления
- •2.1.1. Свойства элементов управления
- •2.1.2. Методы и события элементов управления
- •2.2. Командная кнопкаCommandButton
- •2.3. Элемент управления надписью (метка)Label
- •2.4. Текстовое окно (поле ввода)TextBox
- •2.5. Контрольные вопросы
- •3. Лабораторная работа № 3
- •3.1. Алгоритм. Способы записи алгоритма
- •3.1.1. Структуры алгоритмов
- •3.1.2. Линейная структура алгоритма
- •3.3. Полоса прокрутки
- •3.4. Задания для выполнения
- •Контрольные вопросы
- •4. Лабораторная работа № 4
- •4.1. Разветвляющаяся структура алгоритма
- •4.1.1. Условный оператор if
- •4.1.2. Оператор выбора Select Case
- •4.1.3. Оператор выбора GoTo
- •4.2. Задания для выполнения
- •4.3. Контрольные вопросы
- •5. Лабораторная работа № 5
- •5.1. Циклические структуры алгоритмов
- •5.1.1. Фиксированные циклы
- •5.2. Элемент управления ListBox (список)
- •5.3. Поле со списком
- •5.4. Задания для выполнения
- •5.5. Контрольные вопросы
- •6. Лабораторная работа № 6
- •6.1. Циклы с условием (неопределённые циклы)
- •6.2. Элемент управления Рамка
- •6.3. Элементы управления Флажок и Переключатель
- •6.4. Задания для выполнения
- •6.5. Контрольные вопросы
- •7. Лабораторная работа № 7
- •7.1. Массивы
- •7.1.1. Объявление массивов
- •7.1.2. Объявление массива фиксированного размера
- •7.1.3. Объявление динамического массива
- •7.2. Задания для выполнения
- •7.3. Контрольные вопросы
- •8. Лабораторная работа №8
- •8.1. Работа с матрицами
- •Задания для выполнения
- •8.3. Контрольные вопросы
- •9. Лабораторная работа №9
- •9.1.Список и его составные элементы
- •9.2. Формирование списка
- •9.3. Задания на выполнения
- •10. Задания для самостоятельной работы
- •Приложение
- •Библиографический список
- •Лабораторный
7.1.3. Объявление динамического массива
В случае, когда размер массива заранее неизвестен, VBA позволяет использовать динамические массивы, размер которых можно изменять в процессе выполнения программы. Применение динамических массивов позволяет эффективно управлять памятью, выделяя память под большой массив лишь на то время, когда этот массив используется, а затем освобождая её.
Создание динамического массива осуществляется следующим образом:
Объявляется массив с помощью ключевых слов, используемых при создании массива фиксированного размера. Список размерностей массива остается пустым. При объявлении глобального массива необходимо выбрать ключевое слово Public, при объявлении массива на уровне модуля – Dim, при объявлении массива в процедуре – Dim или Static. Например,
Dim intCountPar () As Integer.
С помощью выполняемого оператора Redim указывается размерность массива и его размер в виде числа или выражения. Синтаксис этого оператора аналогичен синтаксису оператора объявления массива фиксированного размера. Например,
ReDim intCountPar (1 To 20).
При выполнении оператора ReDim данные, размещённые в массиве ранее, теряются. Это удобно в том случае, если данные вам больше не нужны, и вы хотите переопределить размер массива и подготовить его для размещения новых данных, как бы произвести очистку массива. Если нужно изменить размер массива, не потеряв при этом данных, то необходимо воспользоваться оператором ReDim с ключевым словом Preserve. Например, приведённый ниже программный код увеличивает размер массива на единицу без потери хранящихся в массиве данных:
ReDim Preserve intCountPar (X+1).
Пример оформления лабораторной работы
Создать Приложение для выполнения операций с одномерными массивами.
В Приложении:
а) использовать динамические массивы, процедуры общего назначения;
б) предусмотреть ввод элементов массива с клавиатуры пользователем и случайным образом самим Приложением.
В массив включить не менее 12 элементов: положительные и отрицательные целые числа и число ноль, а необходимые величины вводить с клавиатуры или задавать в программе; вывод массивов осуществить в графические окна; при выводе массивов заданных и искомых величин предусмотреть вывод заголовков и необходимых сообщений, например, «Исходный массив» «Сумма положительных элементов массива S=», «Массив не содержит отрицательных элементов», а в пользовательском интерфейсе применить меню.
Задание
Вывести на экран индексы отрицательных элементов массива.
Максимальный отрицательный элемент массива заменить его обратной величиной.
Расположить в порядке убывания последние 6 элементов массива.
Из массива удалить все отрицательные элементы.
Содержание отчёта
Эскиз формы (форм) до назначения объектам свойств.
Эскиз формы (форм) после назначения объектам свойств.
Таблица свойств объектов (по формам).
Структурная схема приложения.
Список идентификаторов.
Блок-схемы алгоритмов и программные коды процедур общего назначения (ввод-вывода массивов, запись массива в файл и чтение массива из файла и т. п.).
По каждому заданию привести текст задачи, блок-схему алгоритма и программный код.
Свойства объектов управления и имена идентификаторов представлены в таблицах 34 и 35, а результат работы приложения и блок–схема первого задания на рисунках 19 и 20.
Таблица 34 – Имена идентификаторов
Назначение переменной |
Имя |
Тип |
Исходный массив |
а |
Integer |
Минимальный элемент |
Max |
Integer |
Переменная цикла |
I |
Integer |
Индекс отрицательного элемента |
sr |
Integer |
Преобразованный массив |
b |
Integer |
Таблица 35 – Свойства объектов управления
Элемент управления |
Значение свойства: | |
Caption |
Name | |
CommandButton |
Выполнить |
CommandButton1 |
TextBox1 |
Нет |
TextBox1 |
TextBox2 |
Нет |
TextBox2 |
TextBox3 |
Нет |
TextBox3 |
Label |
Размерность массива |
Label1 |
ListBox |
Нет |
ListBox1 |
Label |
Исходный массив |
Label2 |
Label |
Массив с сортировкой(зад.3) |
Label1 |
TextBox |
Задание 4 |
TextBox1 |
ListBox |
Нет |
ListBox1 |
Label1 |
Нет |
Label1 |
TextBox |
Нет |
TextBox2 |
Label |
Среднее арифметическое |
Label6 |
Label |
Квадрат минимального |
Label7 |
Label |
Первый перед отрицательным |
Label8 |
Label |
Последний перед отрицательным |
Label9 |
Рисунок 19 – Результат работы приложения
Событийная процедура кнопки Выполнить (задание 1)
Private Sub CommandButton1_Click()
Load UserForm2 ' Загрузить форму UserForm2
UserForm2.Show ' Показать форму UserForm2
End Sub.
Рисунок 20 – Блок-схема задания №1
Событийная процедура кнопки Расчёт
Private Sub CommandButton1_Click()
Dim i As Byte
Dim k As Byte
n = Val(TextBox1.Text)
ReDim a(1 To n)
ListBox1.Clear
ListBox2.Clear
For i = 1 To n
a(i) = Int(Rnd * 100 - 25)
ListBox1.AddItem (" a(" + Str(i) + ")=" + Str(a(i)))
If a(i) < 0 Then
ListBox2.AddItem (" a(" + Str(i) + ")=" + Str(a(i)))
End If
Next i
End Sub
На рисунке 21 представлен результат работы первого задания.
Рисунок 21 – Результат работы задания №1
Событийная процедура кнопки Выполнить (задание 2)
Private Sub CommandButton2_Click()
Load UserForm3 ' Загрузить форму UserForm3
UserForm3.Show ' Показать форму UserForm3
End Sub.
На рисунках 22 и 23 представлены результат работы и блок-схема второго задания.
Рисунок 22 – Блок-схема задания №2
Рисунок 23 – Результат работы задания №2
Событийная процедура кнопки Расчёт
Private Sub CommandButton1_Click()
Dim i As Byte
Dim max As Integer, r As Single
n = Val(TextBox1.Text)
ReDim a(1 To n)
ListBox1.Clear
max = –100
For i = 1 To n
a(i) = Int(Rnd * 100 – 25)
ListBox1.AddItem (" a(" + Str(i) + ")=" + Str(a(i)))
If a(i) < 0 And a(i) > max Then max = a(i)
Next i
r = 1 / max
TextBox3.Value = Format(max, "0")
TextBox4.Value = Format(r, "0.00000")
End Sub.
Событийная процедура кнопки Выполнить (задание 3)
Private Sub CommandButton3_Click()
Load UserForm4 ' Загрузить форму UserForm4
UserForm4.Show ' Показать форму UserForm4
End Sub.
На рисунках 24 и 25 представлены результат работы и блок-схема третьего задания.
Рисунок 24 – Блок-схема задания №3
Рисунок 25 – Результат работы задания №3
Событийная процедура кнопки Расчёт
Dim a() As Integer
Private Sub CommandButton1_Click()
Dim i As Byte
Dim b(6) As Integer
Dim m As Integer, r As Integer
n = Val(TextBox1.Text)
ReDim a(1 To n)
ListBox1.Clear
For i = 1 To n
a(i) = Int(Rnd * 100 – 25)
ListBox1.AddItem (" a(" + Str(i) + ")=" + Str(a(i)))
Next i
m = 6
For i = 1 To m
b(i) = a(n – i + 1)
Next i
For i = 1 To m
For j = 1 To m – 1
If b(j) < b(j + 1) Then
r = b(j)
b(j) = b(j + 1)
b(j + 1) = r
End If
Next j
Next i
For i = 1 To m
ListBox2.AddItem (" b(" + Str(i) + ")=" + Str(b(i)))
Next i
End Sub.
Событийная процедура кнопки Выполнить (задание 4)
Private Sub CommandButton4_Click()
Load UserForm5 ' Загрузить форму UserForm5
UserForm5.Show ' Показать форму UserForm5
End Sub.
Событийная процедура кнопки Расчёт
Dim a() As Integer
Dim b() As Integer
Private Sub CommandButton1_Click()
m = Val(TextBox1.Text)
m1 = m + 2
ReDim a(1 To m)
ReDim b(1 To m1)
Randomize
k = 1
r = 0
ListBox1.Clear
ListBox2.Clear
For i = 1 To m
a(i) = Int(Rnd * 10) - 5
ListBox1.AddItem ("a(" + Str(i) + ")= " + Str(a(i)))
b(i) = a(i)
Next i
For i = 1 To m
If a(i) < 0 Then
ii = i
Exit For
End If
Next i
If ii <> 1 Then
k = 1
Else
b(1) = 111
k = 2
End If
If ii <> 1 Then
For i = 1 To ii – 1
b(k) = a(i)
k = k + 1
Next i
b(k) = 111
k = k + 1
End If
For i = m To 1 Step -1
If a(i) < 0 Then
i1 = i
Exit For
End If
Next i
For i = ii To i1
b(k) = a(i)
k = k + 1
Next i
b(k) = 2222
If i1 <> m Then
For i = i1 + 1 To m
b(k + 1) = a(i)
k = k + 1
Next i
End If
For i = 1 To k
ListBox2.AddItem ("b(" + Str(i) + ")= " + Str(b(i)))
Next i
End Sub.
На рисунках 26 и 27 представлены блок-схема и результат работы четвёртого задания.
Рисунок 26 – Блок-схема задания №4
Рисунок 24 – Результат работы задания №4