Работа с массивами. Теоретические сведения

Содержание

Слайд 2

Теоретические сведения Массив – это упорядоченный набор данных одного типа, снабженных

Теоретические сведения

Массив – это упорядоченный набор данных одного типа, снабженных индексами.
Индексы предназначены

для нахождения определенного элемента массива, т.е. положение каждого элемента в массиве определяется его индексом.
В этом и заключается упорядоченность.
Тип компонент называется базовым типом массива.
Слайд 3

В VBA массив рассматривается как переменная структурированного типа. Массиву присваивается имя,

В VBA массив рассматривается как переменная структурированного типа. Массиву присваивается имя, посред­ством которого

можно ссылаться на него, как на единое целое, так и на любую из его компонент.Переменная с индексом — идентификатор компоненты мас­сива. Формат записи:
<имя массива> (<индекс>), где индекс может быть выражением порядкового типа.
Видим, что индексы принято указывать в круглых скобках после имени массива. По умолчанию нумерация элементов массива начинается с 0. Говорят, что 0 – базовый индекс.
Например, если А – массив из пяти чисел: 2, 3, 7, 9, 6, то А (0) = 2 – первый элемент массива, А (4) = 6 – последний.
Слайд 4

Описание массива определяет имя, размер массива, базовый тип и производится в

Описание массива определяет имя, размер массива, базовый тип и производится в

разделе переменных. В VBA имеются следующие способы описания массивов:
1.             <имя массива> (<номер последнего элемента>) [As <тип>]
2.             <имя массива> (<начальный индекс> To <конечный индекс>) [As <тип>]
Отметим, что второй способ позволяет изменить базовый индекс.
Слайд 5

Другим способом изменения базового индекса является использование оператора Option Base, который

Другим способом изменения базового индекса является использование оператора Option Base, который имеет

следующий синтаксис:
Option Base <базовый индекс>
<базовый индекс> – единица или ноль.
Этот оператор применяется перед процедурой, аналогично оператору Option Explicit.
Например, для изменения базового индекса с 0 на 1 используется оператор Option Base 1.
Слайд 6

Массив A, который был рассмотрен, требует одного индекса для указания любого

Массив A, который был рассмотрен, требует одного индекса для указания любого элемента.


Такой массив называется одномерным (или линейным) В одномерных массивах хра­нятся значения линейных таблиц. Примеры описания одномерных массивов:
1.             Dim A (12) As Byte
2.             Dim A (1 To 12) As Byte
3.             Dim Bin (5) As Integer
4.             Dim Str_mass (4) As String
5.             Dim K (7)
6.             Dim L (0 To 3)
Слайд 7

Заполнение массива в программе производится поэлементно. Чаще всего для этого используется

Заполнение массива в программе производится поэлементно.
Чаще всего для этого используется

цикл с параметром, где в качестве параметра применяется индексная переменная.
Возможно заполнение массива путем простого присвоения значения элементам:
Dim B (1 To 3) As Integer
B (1) = 2
B (2) = 18
B (3) = 6
Слайд 8

Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов,

Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов,

разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типаVariant.
Dim A As Variant
A = Array (10, 20, 35, 70)
Слайд 9

Иногда в процессе выполнения программы требуется изменять размер массива. В этом

Иногда в процессе выполнения программы требуется изменять размер массива. В этом

случае первоначально массив объявляют как динамический. Для этого при объявлении массива не указывают его размерность. Например,
Dim R () As Single
В программе следует вычислить необходимый размер массива и связать его с некоторой переменной, например, n; затем изменить размер динамического массива с помощью оператора ReDim:
ReDim [Preserve] Имя (<номер последнего элемента>) [As <тип>]
ReDim [Preserve] Имя (<начальный индекс> To <конечный индекс>) [As <тип>]
Preserve – ключевое слово, используемое для сохранения данных в существующем массиве при изменении значения последней размерности.
Слайд 10

Двумерный массив — структура данных, хранящая прямоугольную матрицу. В матрице каждый

Двумерный массив — структура данных, хранящая прямоугольную матрицу.
В матрице каждый элемент определяется

номером строки и номером столбца, на пересечении которых он расположен.
Слайд 11

В VBA двумерный массив может быть описан следующим образом: 1. (

В VBA двумерный массив может быть описан следующим образом:
1.        <имя массива> (, ) [As

<тип>]
,  – номер последнего элемента строки И номер последнего элемента строки соответственно;
2.        <имя массива> ( To , To ) [As <тип>]
,  – начальный и конечный индексы элементов строки;
,  – начальный и конечный индексы элементов столбца.
Например,
Dim mass (5, 5) As Integer
Dim mass (1 To 5, 1 To 5) As Integer
описывают один и тот же массив, при условии, что был использован оператор Option Base 1.
Слайд 12

Элементы двумерного массива идентифицируются переменными с двумя ин­дексами. Например: М (3,

Элементы двумерного массива идентифицируются переменными с двумя ин­дексами.
Например: М (3, 5).


Обычно первый индекс связывают с номером строки, второй — с номером столбца матрицы.
Слайд 13

Демонстрационные примеры: 1. Приведем фрагмент программы, осуществляющей ввод десяти элементов целочисленного

Демонстрационные примеры:

1. Приведем фрагмент программы, осуществляющей ввод десяти элементов целочисленного массива А,

формирование строки элементов массива и вывод его на экран.
Dim A(1 To 10) As Integer, i As Integer, Str As String
Str = “ ”
For i = 1 To 10
A(i) = Val(InputBox("Введите   " & i & "-ый элемент массива", "Заполнение массива"))
Str = Str & A(i) & " "
Next
MsgBox Str
Слайд 14

2. Напишем программу, содержащую базовые элементы программ для обработки массивов: заполнение

2. Напишем программу, содержащую базовые элементы программ для обработки массивов:
заполнение случайными

числами динамического массива,
поиск наибольшего и наименьшего элементов,
перестановка элементов,
дописывание в имеющийся массив новых элементов.
Слайд 15

Option Explicit Option Base 1 Sub Mass() Dim M1() As Integer,

Option Explicit
Option Base 1
Sub Mass()
Dim M1() As Integer, M2() As Integer,

n As Integer, i As Integer, max As Integer, min As Integer, _
Str1 As String, Str2 As String, Str3 As String, sum As Integer, pro As Single, buf As Integer
n = InputBox("Введите количество элементов массива", "Определение размера массива")
ReDim M1(n), M2(n)
'Заполнение массива случайными числами в диапазоне от 1 до 10
'и формирование строки значений элементов массива
Randomize
For i = 1 To n
M1(i) = Int(10 * Rnd + 1)
M2(i) = Int(10 * Rnd + 1)
Str1 = Str1 & M1(i) & " "
Str3 = Str3 & M2(i) & " "
Next
Слайд 16

'Поиск максимального элемента массива M1 max = M1(1) For i =

'Поиск максимального элемента массива M1

max = M1(1)
For i = 2 To

n
If M1(i) > max Then max = M1(i)
Next
Слайд 17

'Поиск минимального элемента массива M1 min = M1(1) For i =

'Поиск минимального элемента массива M1

min = M1(1)
For i = 2 To

n
If M1(i) < min Then min = M1(i)
Next
Слайд 18

'Поиск суммы элементов массива M1, стоящих на четных местах sum =

'Поиск суммы элементов массива M1, стоящих на четных местах

sum = 0
For

i = 2 To n Step 2
sum = sum + M1(i)
Next
Слайд 19

'Поиск произведения ненулевых элементов массива M1 pro = 1 For i

'Поиск произведения ненулевых элементов массива M1

pro = 1
For i = 1

To n
If M1(i) <> 0 Then pro = pro * M1(i)
Next
Слайд 20

'Поменяем местами 1-ый и 2-ой элементы массива M1 If n >=

'Поменяем местами 1-ый и 2-ой элементы массива M1

If n >= 2

Then
buf = M1(1)
M1(1) = M1(2)
M1(2) = buf
End If
For i = 1 To n
Str2 = Str2 & M1(i) & " "
Next
Слайд 21

MsgBox "Массив: " & Str1 & Chr(13) & "Максимальный элемент: "

MsgBox "Массив: " & Str1 & Chr(13) & "Максимальный элемент: "

& max & Chr(13) & _
"Минимальный элемент: " & min & Chr(13) & "Сумма элементов массива, стоящих на четных местах: " _
& sum & Chr(13) & "Произведение ненулевых элементов массива: " & pro & Chr(13) _
& "Массив после обмена 1-го и 2-го элементов: " & Str2
Слайд 22

'Допишем в массив M2 максимальный и минимальный элементы массива Ml ReDim

'Допишем в массив M2 максимальный и минимальный элементы массива Ml

ReDim Preserve

M2(n + 2)
M2(n + 1) = max
M2(n + 2) = min
Str2 = ""
For i = 1 To n + 2
Str2 = Str2 & M2(i) & " "
Next
Слайд 23

MsgBox "Первый массив: " & Str1 & Chr(13) & "Второй массив:

MsgBox "Первый массив: " & Str1 & Chr(13) & "Второй массив:

" & Str3 & Chr(13) & _
"Второй массив c приписанным максимумом и минимумом из первого: " & Chr(13) & Str2
End Sub
Слайд 24

3. Дан целочисленный линейный массив. Отсортировать его в порядке убывания значений.

3. Дан целочисленный линейный массив. Отсортировать его в порядке убывания значений.
Воспользуемся алгоритмом,

известным под названием “метод пузырька”.
Идея состоит в последовательном перемещении путем попарных перестановок наибольшего элемента вначале на место n-го элемента, затем n-1-го элемента и т.д.
Слайд 25

Option Explicit Option Base 1 Sub Сортировка() Dim A() As Integer,

Option Explicit
Option Base 1
Sub Сортировка()
Dim A() As Integer, n As Integer,

i As Integer, j As Integer, P  As Integer, Str1 As String, Str2 As String
n = InputBox("Введите число элементов массива:", "Определение размера")
ReDim A(n) As Integer
Str1 = ""
Str2 = ""
Слайд 26

'Заполнение массива с клавиатуры и формирование строки For i = 1

'Заполнение массива с клавиатуры и формирование строки

For i = 1 To

n
A(i) = Val(InputBox("Введите   " & i & "-ый элемент массива", "Заполнение массива"))
Str1 = Str1 & A(i) & " "
Next
Слайд 27

'Вложенные циклы, организующие сортировку массива For i = 1 To n

'Вложенные циклы, организующие сортировку массива

For i = 1 To n -

1
For j = 1 To n - 1
If A(j) <= A(j + 1) Then
P = A(j)
A(j) = A(j + 1)
A(j + 1) = P
End If
Next
Next
Слайд 28

'Формирование строки, содержащей элементы отсортированного массива For i = 1 To

'Формирование строки, содержащей элементы отсортированного массива

For i = 1 To n
Str2

= Str2 & A(i) & " "
Next
MsgBox "Исходный массив: " & Str1 & Chr(13) & "Отсортированный массив: " & Str2, , "Результат"
End Sub
Слайд 29

4. Пример заполнения двумерного динамического массива случайными целыми числами и вывод на экран.

4. Пример заполнения двумерного динамического массива случайными целыми числами и вывод на

экран.
Слайд 30

Option Explicit Option Base 1 Sub Массив_двумерный () Dim mass() As

Option Explicit
Option Base 1
Sub Массив_двумерный ()
Dim mass() As Integer, i As

Integer, j As Integer, n As Integer, m As Integer, str As String
n = InputBox("Введите количество строк массива", "Размер массива")
m = InputBox("Введите количество столбцов массива", "Размер массива")
'Переопределение размерности массива
ReDim mass(1 To n, 1 To m) As Integer
Randomize
Слайд 31

'Заполнение массива случайными значениями 'и накопление элементов массива для последующего вывода

'Заполнение массива случайными значениями 'и накопление элементов массива для последующего вывода значений

For

i = 1 To n
For j = 1 To m
mass(i, j) = Int(100 * Rnd + 1)
str = str & mass(i, j) & "   "
Next j
str = str & Chr(13)
Next i
MsgBox "Массив: " & Chr(13) & str, , "Результат"
End Sub
Слайд 32

Сформировать матрицу Пифагора (таблицу умножения в матричной форме) и вывести ее

Сформировать матрицу Пифагора (таблицу  умножения в матричной форме) и вывести ее на

экран.
Значения элементов матрицы Пифагора вычисляются следующим образом: 
P (i, j) = i*j.
Вычисления и вывод матрицы производятся в двух вложенных циклах. Вывод на экран организуем в виде пря­моугольной таблицы.
Слайд 33

Option Explicit Option Base 1 Sub Пифагор() Dim P(1 To 9,

Option Explicit
Option Base 1
Sub Пифагор()
Dim P(1 To 9, 1 To 9)

As Integer, i As Integer, j As Integer, Str As String
Str = ""
For i = 1 To 9
For j = 1 To 9
P(i, j) = i * j
Str = Str & P(i, j) & "   "
Next
Str = Str & Chr(13)
Next
MsgBox "Матрица Пифагора: " & Chr(13) & Str, , "Результат"
End Sub
Слайд 34

Пример. Найти сумму элементов матрицы А(3,2)

Пример. Найти сумму элементов матрицы А(3,2)

Слайд 35

Пример. Найти произведение положительных и отрицательных элементов матрицы М(6,12)

Пример. Найти произведение положительных и отрицательных элементов матрицы М(6,12)

Слайд 36

Контрольный пример Сколько чисел будет просуммировано в результате работы приведенного фрагмента

Контрольный пример Сколько чисел будет просуммировано в результате работы приведенного фрагмента программы?

S

= 0
For I = 1 To 5
For J = 1 To 4
S = S + D(I,J)
Next
Next

Варианты ответов:
А. 5
В. 4
С. 20
D. 9

Слайд 37

Контрольный пример Чему равно S в результате работы приведенного фрагмента программы?

Контрольный пример Чему равно S в результате работы приведенного фрагмента программы?

S =

0
For I = 1 To 5
For J = 1 To 4
S = S + D(I,J)
Next
Next

Варианты ответов:
А. 10
В. 150
С. 60
D. 50

Слайд 38

Контрольный пример Чему равно S в результате работы приведенного фрагмента программы?

Контрольный пример Чему равно S в результате работы приведенного фрагмента программы?

For I

= 1 To 5
S = 0
For J = 1 To 4
S = S + D(I,J)
Next
Next

Варианты ответов:
А. 10
В. 150
С. 60
D. 50

Слайд 39

Контрольный пример Какой результат вычисляет приведенный фрагмент программы? P = 1

Контрольный пример Какой результат вычисляет приведенный фрагмент программы?

P = 1
For I =

1 To 7
For J = 1 To 5
P = P*A(I,J)
Next
Next

Варианты ответов:
А. Суммы индексов элементов пятой строки.
В. Произведения элементов 7 –ой строки.
С. Сумма всех элементов.
D. Произведение всех элементов

Слайд 40

Контрольный пример Какой результат вычисляет приведенный фрагмент программы? S = 0

Контрольный пример Какой результат вычисляет приведенный фрагмент программы?

S = 0
For I =

1 To 3
For J = 1 To 5
S = S + C(3,J)
Next
Next

Варианты ответов:
А. Сумму элементов третьего столбца.
В. Сумму элементов третьей строки.
С. Сумму всех элементов.
D. Утроенную сумму элементов третьей строки.
.

Слайд 41

Контрольный пример Какой результат вычисляет приведенный фрагмент программы? S3 = 0

Контрольный пример Какой результат вычисляет приведенный фрагмент программы?

S3 = 0
For I =

1 To 3
For J = 1 To 5
S= S3 + C(3,J)
Next
Next

Варианты ответов:
А. Сумму элементов третьего столбца.
В. Сумму элементов третьей строки.
С. Сумму всех элементов.
D. A,B,C - не верны.
.

Слайд 42

Контрольный пример Какой результат вычисляет приведенный фрагмент программы? P = 1

Контрольный пример Какой результат вычисляет приведенный фрагмент программы?

P = 1
For I =

1 To 7
For J = 1 To 5
P = P*A(I,J)
Next
Next

Варианты ответов:
А. Суммы всех строк.
В. Произведения всех столбцов.
С. Сумма всех элементов.
D. Произведение всех элементов

Слайд 43

Пример. Массив D расположен в ячейках A2:F5 ЭТ с именем Массив.

Пример. Массив D расположен в ячейках A2:F5 ЭТ с именем Массив.

Найти произведения его элементов по столбцам и записать их в массив с именем Р. Результат поместить на лист Произведение, в ячейки D1:D6.

Решение
1. Исходный массив:

Массив D(4,6)

2. Результат:

Массив Р(6)

Слайд 44

Слайд 45

Контрольный пример Сколько чисел будет получено в результате работы приведенного фрагмента

Контрольный пример Сколько чисел будет получено в результате работы приведенного фрагмента программы?


For

I = 1 To 7
P(I) = 1
For J = 1 To 5
P(I) = P(I)*N(I,J)
Next
Next

Варианты ответов:
А. 5
В. 7
С. 35
D. 12

Слайд 46

Пример. Массив К расположен в ячейках C4:D8 листа Первый. Записать удвоенное

Пример. Массив К расположен в ячейках C4:D8 листа Первый. Записать удвоенное

значение элементов этого массива в ячейки В2:С6 листа Второй.

Исходный массив

Четвертая строка, Третий столбец

К(5,2)

Результат вычислений

Вторая строка, второй столбец

Слайд 47

Слайд 48

Контрольный пример Укажите адрес ячейки, начиная с которой осуществляется считывание массива

Контрольный пример Укажите адрес ячейки, начиная с которой осуществляется считывание массива М

из ЭТ?

For I = 1 To 5
For J = 1 To 8
M(I,J) = Старый.Cells(I+3,J+1)
Новый.Cells(I,J+4) = 3*M(I,J)
Next
Next

Варианты ответов:
А. Лист Старый, ячейка В4.
В. Лист Старый, ячейка D2.
С. Лист Новый, ячейка В4.
D. Лист Новый, ячейка D2.