Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posobie_Serkova_redKorovkina.doc
Скачиваний:
49
Добавлен:
02.03.2016
Размер:
4.21 Mб
Скачать

7.1.3. Объявление динамического массива

В случае, когда размер массива заранее неизвестен, VBA позволяет использовать динамические массивы, размер которых можно изменять в процессе выполнения программы. Применение динамических массивов позволяет эффективно управлять памятью, выделяя память под большой массив лишь на то время, когда этот массив используется, а затем освобождая её.

Создание динамического массива осуществляется следующим образом:

  1. Объявляется массив с помощью ключевых слов, используемых при создании массива фиксированного размера. Список размерностей массива остается пустым. При объявлении глобального массива необходимо выбрать ключевое слово Public, при объявлении массива на уровне модуля – Dim, при объявлении массива в процедуре – Dim или Static. Например,

Dim intCountPar () As Integer.

  1. С помощью выполняемого оператора Redim указывается размерность массива и его размер в виде числа или выражения. Синтаксис этого оператора аналогичен синтаксису оператора объявления массива фиксированного размера. Например,

ReDim intCountPar (1 To 20).

При выполнении оператора ReDim данные, размещённые в массиве ранее, теряются. Это удобно в том случае, если данные вам больше не нужны, и вы хотите переопределить размер массива и подготовить его для размещения новых данных, как бы произвести очистку массива. Если нужно изменить размер массива, не потеряв при этом данных, то необходимо воспользоваться оператором ReDim с ключевым словом Preserve. Например, приведённый ниже программный код увеличивает размер массива на единицу без потери хранящихся в массиве данных:

ReDim Preserve intCountPar (X+1).

Пример оформления лабораторной работы

Создать Приложение для выполнения операций с одномерными массивами.

В Приложении:

а) использовать динамические массивы, процедуры общего назначения;

б) предусмотреть ввод элементов массива с клавиатуры пользователем и случайным образом самим Приложением.

В массив включить не менее 12 элементов: положительные и отрицательные целые числа и число ноль, а необходимые величины вводить с клавиатуры или задавать в программе; вывод массивов осуществить в графические окна; при выводе массивов заданных и искомых величин предусмотреть вывод заголовков и необходимых сообщений, например, «Исходный массив» «Сумма положительных элементов массива S=», «Массив не содержит отрицательных элементов», а в пользовательском интерфейсе применить меню.

Задание

  1. Вывести на экран индексы отрицательных элементов массива.

  2. Максимальный отрицательный элемент массива заменить его обратной величиной.

  3. Расположить в порядке убывания последние 6 элементов массива.

  4. Из массива удалить все отрицательные элементы.

Содержание отчёта

  1. Эскиз формы (форм) до назначения объектам свойств.

  2. Эскиз формы (форм) после назначения объектам свойств.

  3. Таблица свойств объектов (по формам).

  4. Структурная схема приложения.

  5. Список идентификаторов.

  6. Блок-схемы алгоритмов и программные коды процедур общего назначения (ввод-вывода массивов, запись массива в файл и чтение массива из файла и т. п.).

  7. По каждому заданию привести текст задачи, блок-схему алгоритма и программный код.

Свойства объектов управления и имена идентификаторов представлены в таблицах 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]