Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Массивы



Массив представляет собой набор переменных с одним именем и различными индексами. Каждая такая переменная называется элементом массива. Индекс – это числовое значение, используемое для ссылки на отдельный элемент в массиве. Количество хранящихся в массиве элементов называется размером массива. Размер массива ограничен объёмом оперативной памяти и типом данных элементов массива. Размер массива, в отличие от переменной, может меняться в процессе выполнения программы.

Простой массив имеет одно измерение. Например, массив, содержащий список студентов в группе. Примером трёхмерного массива могут служить сведения об объёме продаж по региону за месяц, за год. Можно иметь в массиве до 60 измерений. Однако в реальной жизни очень редко встречается использование размерности выше 5 или 6.

Размерность массива – это количество индексов, которые определяют местоположение элемента в массиве.

Массив – это группа элементов одного типа, которые имеют общее имя; на конкретный элемент массива ссылаются, используя имя и массива, и индекс. Например, можно определить массив из 12 строк так, чтобы каждая переменная соответствовала названию месяца. Если вы назовете массив MNames, то можете обратиться к первому элементу массива как MNames(0), ко второму – как MNames(1) и т. д., до MNames(11).

7.1.1. Объявление массивов

В VBA существуют массивы фиксированного размера и динамические массивы. Массив фиксированного размера имеет неизменный размер, заданный при его объявлении.

7.1.2. Объявление массива фиксированного размера

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

· глобальный массив объявляется с помощью оператора Public в секции Declaration или Dim модуля;

· массив уровня модуля – с помощью оператора Private в секции Declaration модуля;

· локальный массив – с помощью оператора Private или Dim процедуры.

Наиболее часто для объявления массива используется оператор Dim. Обычно индексы массива начинаются с нуля. Границы массива всегда должны быть целыми числами. Синтаксис оператора Dim:

Dim имяМассива (размерМассива) [As типМассива].

Объявление массива зависит от области его видимости.

Массив, как и обычные переменные, объявляются с помощью операторов Dim или Public. Кроме того, можно определить количество элементов в массиве: введите нижний индекс, ключевое слово To и верхний индекс– вся конструкция будет заключена в скобки. Например, объявить массив, содержащий ровно 100 целых чисел, можно следующим образом.

Dim Mas(1 To 100) as Integer.

При объявлении массива обязательно следует указывать только верхний индекс, тогда VBA установит нижний индекс равным нулю. Следовательно, два следующих оператора приведут к одинаковым результатам.

Dim Mas(0 To 100) as Integer

Dim Mas(100) as Integer.

В обоих случаях массив состоит из 101 элемента.

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

Option Base 1.

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

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

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

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

1. Dim intCountPar () As Integer.

2. С помощью выполняемого оператора 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





Дата публикования: 2014-11-02; Прочитано: 695 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.023 с)...