27

массивы

Embed Size (px)

Citation preview

Page 1: массивы
Page 2: массивы

ВыходВыход

Тема:Тема:

Page 3: массивы

Массив - индексированная группа данных, которая обрабатывается как единая переменная. Порядок элементов в массиве задается индексами его элементов.

ВыходВыход

Page 4: массивы

Массивы могут быть: •одномерные и многомерные; •статические и динамические.

ВыходВыход

Page 5: массивы

Одномерный массив

Ёлка (1) Ёлка (2) Ёлка (3) Ёлка (4) Ёлка (5) Ёлка (6) Ёлка (7)

Имя массива

Индекс массива

ВыходВыход

Page 6: массивы

Многомерный массив

Ёлка (1,1)Ёлка (1,2) Ёлка (1,3)Ёлка (1,4) Ёлка (1,5)Ёлка (1,6)Ёлка (1,7)

Ёлка (2,1)Ёлка (2,2) Ёлка (2,3)Ёлка (2,4) Ёлка (2,5)Ёлка (2,6)Ёлка (2,7)

Ёлка (3,1)Ёлка (3,2) Ёлка (3,3)Ёлка (3,4) Ёлка (3,5)Ёлка (3,6)Ёлка (3,7)

стро

киСтолбцы

ВыходВыход

Page 7: массивы

Статические массивы имеют фиксированное количество элементов, определённое при объявлении массива.

ВыходВыход

Page 8: массивы

Чтобы создать массив, нужно определить: его имя, количество элементов (размер массива), тип данных, которые будут храниться в массиве.

Синтаксис объявления:Dim ИмяМассива (размер) As ТипДанных

ВыходВыход

Page 9: массивы

Пример:Dim МойМассив(3) As IntegerСоздан массив по имени

МойМассив, состоящий из четырех элементов и способный хранить значения типа Integer.

ВыходВыход

Page 10: массивы

Другая версия задания массива: указать первый и последний номера элементов массива:

Dim МойМассив (1 То 3) As Integer

ВыходВыход

Page 11: массивы

Элементы созданного массива не содержат никаких данных. Чтобы сохранить в массиве какое-нибудь значение, нужно указать, какому элементу оно должно быть присвоено.

Предположим, создан массив, который может содержать в себе до пяти строк:

Dim Сотрудник(4) As StringЕсли необходимо первому элементу

массива присвоить значение Иван Никитин, надо прописать такой код:

Сотрудник(0) = “Иван Никитин”ВыходВыход

Page 12: массивы

Объявление одномерного массиваПример 1:Option Base 0‘одномерный массив из 11 эл-тов, первый эл-т ‘массива Spisok1(0) Dim Spisok1(10) As Long‘одномерный массив из 10 эл-тов, первый эл-т ‘массива Spisok2 (1)Dim Spisok2(1 to 10) As Long

Пример 2:Option Base 1‘одномерный массив из 10 эл-тов, первый эл-т ‘массива Elka(1) Dim Elka(10) As Byte

ВыходВыход

Page 13: массивы

Порядок создания двухмерного массива тот же, что и одномерного, с той лишь разницей, что, указывая его размер, нужно указать два значения – строки и столбцы:

Dim ДвухММассив (Строки, Столбцы) As ТипДанных

ВыходВыход

Page 14: массивы

Объявление многомерного массива

Пример 3:‘двумерный массив 11 строк×26 столбцовDim Spisok2(10, 25) As Long‘двумерный массив с указанием начальных ‘границDim SpisokGr(1 To 10, 5 To 50) As String

ВыходВыход

Page 15: массивы

Способы вывода элементов двумерного массива

Пример 6:st = ""For i = 1 To 5st = "" For j = 1 To 5 st = st & " " & m(i, j) Next j Debug.Print stNext i Пример 7:

For i = 1 To 5 For j = 1 To 5 Sheets(1).Cells(i, j) = m(i, j) Next jNext i

ВыходВыход

Page 16: массивы

В большинстве программ при создании массива сразу же инициализируют его, присвоив каждому элементу нулевое значение или пустую строку.

Это можно сделать несколькими способами:

ВыходВыход

Page 17: массивы

Инициализация элементов массива

Ёлка (1,1)Ёлка (1,2) Ёлка (1,3) Ёлка (1,4) Ёлка (1,5)Ёлка (1,6)Ёлка (1,7)

Ёлка (2,1)Ёлка (2,2) Ёлка (2,3) Ёлка (2,4) Ёлка (2,5)Ёлка (2,6)Ёлка (2,7)

Ёлка (3,1)Ёлка (3,2) Ёлка (3,3) Ёлка (3,4) Ёлка (3,5)Ёлка (3,6)Ёлка (3,7)

ВыходВыход

Page 18: массивы

Способы инициализацииПример 4:‘последовательностью операторов:Dim B(1, 1) As SingleB(0, 0) = 2: B(0, 1) = 4B(1, 0) = 1: B(1, 1) = 3Пример 5:‘оператором цикла:Dim m(1 To 5, 1 To 5) As IntegerDim i, j As IntegerFor i = 1 To 5 For j = 1 To 5 m(i, j) = i * j Next jNext i

ВыходВыход

Page 19: массивы

Выбор размера массива может быть затруднен, если неизвестно, сколько данных будет введено в массив, или если объем данных, собираемых для массива, значительно меняется. Для подобных ситуаций VBA поддерживает особый тип массивов, называемый динамическим (dynamic) массивом.

ВыходВыход

Page 20: массивы

Динамические массивы имеют переменное количество элементов и могут растягиваться и сжиматься в ходе выполнения программы.

При помощи ключевого слова ReDim можно в любой момент изменить размерность динамического массива. Если указать ключевое слово Preserve, VBA сохранит все имеющиеся элементы массива, в противном случае данные, содержащиеся в массиве, удалятся.Пример объявления: Dim MyArray() As String

ВыходВыход

Page 21: массивы

Решение задач с использованием динамического массива

Public Sub do_true_end()Dim arr() As IntegerDim i As ByteIndexArr = 0Do IndexArr = IndexArr + 1 ReDim Preserve arr(IndexArr) arr(IndexArr) = InputBox("Введите элемент _ массива:")Loop While arr(IndexArr) >= 0 And _

IndexArr < 255End Sub

ВыходВыход

Page 22: массивы

Public Sub ArrayFunc()Dim m(1 To 5, 1 To 5) As IntegerDim i, j As IntegerFor i = 1 To 5st = "" For j = 1 To 5 m(i, j) = CInt(7 * Rnd) st = st & " " & m(i, j) Next j Debug.Print stNext icol = 0For i = 1 To 5 For j = 1 To 5 If m(i, j) = 0 Then col = col + 1 Exit For End If Next jNext iDebug.Print "В массиве " & col & " строк содержат 0"End Sub

ВыходВыход

Page 23: массивы

В системе нумерации с нулевой базой индекс для первого элемента в любом измерении массива является равным 0; массив с 10 элементами имеет индексы от 0 до 9.

VBA позволяет задавать начальное число для элементов массива, используя директиву компилятора Option Base для указания того, должна ли нумерация индексов начинаться с 0 или с 1.

ВыходВыход

Page 24: массивы

Необходимо помещать оператор Option Base в область объявлений модуля перед объявлениями любых переменных, констант или процедур. Нельзя помещать оператор Option Base внутри процедуры. Можно иметь только один оператор Option Base в модуле; оператор Option Base влияет на все массивы, объявляемые в модуле, независимо от того, являются ли они локальными в процедуре или объявляются на модульном уровне.

Например:Option Base 0 'установка по умолчанию с нуляOption Base 1 'индексы массивов начинаются с 1

ВыходВыход

Page 25: массивы

При работе с массивами можно применять следующие функции и процедуры:

1. Array (списокАргументов)Создает массив типа Variant. Аргумент в

скобках представляет разделенный запятыми список значений, присваиваемых элементам массива.

Пример:Dim День As VariantДень=Array(«Пн»,"вт","ср",….)

ВыходВыход

Page 26: массивы

Определение границ индексов массива

Функции LBound и UBound возвращают минимальное и максимальное допустимые значения указанного индекса массива в заданном измерении.

ВыходВыход

Page 27: массивы

Lbound (имяМассива [, размерность])Ubound (имяМассива [, размерность]),где имяМассива – имя переменной

массива;размерность – целое число,

указывающее размерность массива, нижнюю или верхнюю границу которой возвращает функция. Для первой размерности следует указать 1, для второй – 2 и т. д. Если аргумент размерность опущен, подразумевается значение 1.

ВыходВыход