Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
408
Добавлен:
18.09.2019
Размер:
148.78 Кб
Скачать

Формирование и обработка массивов

Массив это упорядоченная совокупность однотипных данных. Массив состоит из элементов, имеющих порядковые номера, т.е. элементы массива упорядочены. Таким образом, если объекты одного типа обозначить именем, например "А", то элементы массива будут А(1), А(2), А(3) и т.д. В скобках указан порядковый номер элемента. Порядковый номер не несет никакой информации о значении элемента, а показывает расположение элемента среди других.

К элементам массива можно обращаться только по их номеру (индексу).

Если элементы массива имеют один индекс, то массив называется одномерным или линейным, либо массив - вектор

По способу организации различают:

одномерные массивы (линейные) или массивы - векторы (элементы массива имеют один индекс);

двумерные массивы матрицы (первый индекс номер строки, второй номер столбца);

трехмерные и n-мерные массивы.

Примером одномерного массива является n-мерный вектор: x1, x2, …., xn.

Матрица (2-мерный массив) в общем виде записывается следующим образом:

a11

a12

a13

a1n

a21

a22

a23

a2n

..

 

 

 

am1

am2

am3 amn

Правила работы с массивами:

1.Все используемые в программе массивы должны быть объявлены.

2.Ввод, вывод, обработка массивов осуществляются в цикле.

3.Значения индексов не должны выходить за указанные в объявлении массива пределы.

4.Для обращения к элементу массива нужно определить его индекс.

Примеры объявления массивов.

Dim A(8) As Integer ‘индексы массива 0 1 2 3 4 5 6 7 8

Как вы могли заметить, определение массива отличается от определения обычной переменной только индексом, указанным в скобках. Этот индекс указывает размерность

1

массива. В данной случае массив myArray будет содержать 9 элементов. Почему 9? Потому что нижняя граница массива начинается с нуля. [0,1,2.....7,8].

Соответственно, массив Dim B(3, 3) As Single ‘индексы массива 0 1 2 3

содержит 16 элементов (4 строки х 4 столбца).

Другим способом изменения базового индекса является использование ключевого слова to при объявлении массива:

Dim

B(l

То

3,

1 То 3) As

Single ‘индексы массива

1

2

3

 

Dim

A(l

To

9)

As Integer

‘индексы массива 1

2

3

4

5 6 7 8 9

Способы формирования массивов

Массив в программе задается поэлементно. Формировать массивы можно разными способами.

Вариант 1

Сформировать массив 2 х 2. Значения элементов массива задать в программе.

Dim B(l To 2, 1 То 2) As Single

B(l,l)=2.3 : В(1,2)=4.5 :В(2,1)=1.1 : В(1,2)=6.0

Вариант 2 (тип данных только variant)

Сформировать одномерный массив из 4 элементов. Значения элементов массива задать в программе. Массив вывести на лист.

Sub ff()

Dim a As Variant

a = Array(10, 20, 30, 1)'индексы элементов массива 0,1,2,3

For i = 0 To 3 Sheets(1).Cells(i + 1, 1) = a(i) Next i

End Sub

2

Вариант 3

Сформировать массив из 5 элементов. Данные ввести с клавиатуры.

Sub mm()

Dim B(l To 5) As Single For i = 1 to 5

B(i) = InputBox(“Введите элемент массива №”&I) Sheets(“Лист1”).Cells(1,I)=B(i)

Next I

End Sub

Примечание

При выполнении InputBox(“Введите элемент массива №”&I)

на экране появляется окно

Вариант 4

Использование функции RND

Справка

Функция RND

Возвращает случайное число: 0 или 1.

Пример:

I = RND

Переменной I будет присвоено либо 0, либо 1.

Для генерации целых случайных чисел в заданном диапазоне используется формула: a(i) = Int ((верхняяГраница - нижняяГраница +1)*RND + нижняя граница)

Пример:

I = Int ((100 - 50 + 1) * RND + 50)

В переменную I будет записано целое число в диапазоне от 50 до 100.

3

Формирование одномерного массива

Сформировать одномерный массив из 10 элементов с помощью функции RND и вывести на лист в 4 строку

Option Explicit Sub mass()

Dim a(1 to 10) as integer, i as integer For I = 1 to 10

a(i)= Int ((100 - 50 + 1) * RND + 50) Sheets("Лист1").Cells(4, i) = a(i) Next I

End Sub

i=1,10,1

a(i)

a(i)

В переменную a(i) будет записан массив из 10 чисел выбранных в диапазоне от 50 до 100 и затем выведен на лист.

Формирование двумерного массива

Сформировать двумерный массив 5 х 10 и вывести на лист, начиная с 5 строки листа.

Option Explicit

Sub pp7()

Dim a(1 To 5, 1 to 10 ) As Integer, i As Integer, j As Integer

'Формирование массива

Randomize

For i = 1 To 5 'смена строки

For j = 1 To 10 'формирование элементов в строке a(i, j) = Int(101 * Rnd - 50) Sheets("Лист2").Cells(i+4, j) = a(i,j)

Next j

Next i

End Sub

4

Определение суммы и количества элементов, среднего значения одномерного массива

Задача 1

Сформировать одномерный массив из 10 элементов с помощью функции RND в диапазоне от -50 до + 50.

Определить сумму элементов массива, среднее значение положительных и среднее значение отрицательных элементов массива, количество нулевых элементов.

Все вывести на рабочий лист.

Option Explicit Sub pr1()

Dim a(1 To 10) As Integer, i As Integer

Dim summ, sumpol, sumotr, notr, npol, nnul, srpol, srotr summ = 0

sumotr = 0 'сумма отрицательных элементов sumpol = 0 'сумма положительных элементов notr = 0: npol = 0: nnul = 0

Randomize 'позволяет получать новые значения массива 'при каждом запуске программы

'Формирование массива, расчет суммы элементов и вывод на лист

For i = 1 To 10

a(i) = Int(101 * Rnd - 50) Sheets("Лист1").Cells(i, 1) = a(i) summ = summ + a(i)

Next i

Sheets("Лист1").Cells(i + 1, 1) = summ

'Определение суммы и количества полож., отриц, и количества нулевых элементов

For i = 1 To 10 If a(i) > 0 Then

sumpol = sumpol + a(i) npol = npol + 1

Else

If a(i) < 0 Then sumotr = sumotr + a(i) notr = notr + 1

Else

nnul = nnul + 1 End If

End If

Next i

srpol = sumpol / npol

'среднее значение полож. элементов

srotr = sumotr / notr

'среднее значение отриц. элементов

'Вывод данных на лист

Sheets("Лист1").Cells(1, 2) = "srpol=" Sheets("Лист1").Cells(1, 3) = srpol

5

Sheets("Лист1").Cells(2, 2) = "srotr="

Sheets("Лист1").Cells(2, 3) = srotr

Sheets("Лист1").Cells(3, 2) = "nnul="

Sheets("Лист1").Cells(3, 3) = nnul

End Sub

Поиск экстремальных значений в массиве

Задача 2

1.Сформировать одномерный массив из 10 элементов с помощью функции RND в диапазоне от -50 до + 50.

2.Определить максимальный и минимальный элементы массива. Поменять местами максимальный и минимальный элементы массива.

3.Новый массив вывести на лист

Option Explicit

Sub pr2()

Dim a(1 To 10) As Integer, i As Integer, min As Integer, max As Integer

Dim ind_min As Integer, ind_max As Integer

Randomize For i = 1 To 10

a(i) = Int(101 * Rnd - 50) Sheets("Лист2").Cells(i, 1) = a(i) Next i

min = a(1) max = a(1)

ind_min = 1 'индекс минимально элемента ind_max = 1 'индекс максимального элемента

' определение экстремальных значений элементов массива и их индексов

For i = 1 to 10

If min > a(i) then min = a(i) ind_min = i

Else

If max < a(i) then max = a(i) ind_max = i

End If End If Next i

'Смена элементов местами (через промежуточную переменную) prom = a(ind_min)

a(ind_min) = a(ind_max) a(ind_max) = prom

6

'Вывод нового массива начиная с 12 строки листа

For i = 1 to 10 Sheets("Лист2").Cells(i+11, 1) = a(i) Next i

Sheets("Лист2").Cells(1, 2) = "минимум="

Sheets("Лист2").Cells(1, 3) = min

Sheets("Лист2").Cells(2, 2) = "максимум="

Sheets("Лист2").Cells(2, 3) = max

End Sub

Задача 3

'Сформировать массив 5х10 в диапазоне чисел от -300 до 300 и вывести на лист. 'Рассчитать количество элементов, предшествующих максимальному элементу. 'Вывести на лист максимальный элемент и его индексы 'Вывести количество элементов, предшествующих максимальному.

Sub pr()

Dim a(1 To 5, 1 To 10) As Integer, i As Integer, j As Integer, s, n, max, ni, nj, k Randomize

max = -301

'Формирование массива

For i = 1 To 5

For j = 1 To 10

a(i, j) = Int((300 + 300 + 1) * Rnd - 300) Cells(i, j) = a(i, j)

'определение макс. элемента

If max < a(i, j) Then max = a(i, j)

ni = i nj = j End If Next j Next i

'кол-во элементов перед максимальным элементом

For i = 1 To ni For j = 1 To 10 k = k + 1

Next j

Next i

k = k - 10 + nj - 1

'Вывод данных на лист

Cells(1, 12) = "max=" Cells(1, 13) = max Cells(2, 12) = "ni="

7

Cells(2, 13) = ni

Cells(3, 12) = "nj="

Cells(3, 13) = nj

Cells(4, 12) = "k="

Cells(4, 13) = k

End Sub

Формирование и обработка двумерного массива

Пример 4

Сформировать двумерный массив 5 х 10 и вывести на лист

Sub pp7()

Dim a(1 To 5, 1 to 10 ) As Integer, i As Integer, j As Integer

'Формирование массива

Randomize

For i = 1 To 5 'смена строки

For j = 1 To 10 'формирование элементов в строке a(i, j) = Int(101 * Rnd - 50)

Sheets("Лист2").Cells(i, j) = a(i,j) Next j

Next i

End Sub

Пример 5

Сформировать массив 5 х 5. Из элементов главной диагонали сформировать новый массив и найти сумму его элементов.

Sub pp7()

Dim a(1 To 5, 1 to 5 ) As Integer, i As Integer, j As Integer, B (1 to 5) as integer, sum as integer

Randomize

For i = 1 To 5 'смена строки

For j = 1 To 5 'формирование элементов в строке a(i, j) = Int(101 * Rnd - 50) Sheets("Лист2").Cells(i, j) = a(i,j)

Next j

Next i

For i = 1 to 5 b(i) = a(i,i)

Sum = sum + b(i) Sheets("Лист2").Cells(i, 8) = b(i) Next i

Sheets("Лист2").Cells(1, 10) = sum

End Sub

8

Пример 6

'Сформировать матрицу с(i,j)=a(i,j)*b(i)

Sub matr6()

Dim a(1 To 5, 1 To 5), b(1 To 5), c(1 To 5, 1 To 5) As Integer

For i = 1 To 5

'изменение номера строки

B(i) = Int(101 * Rnd + 0)

For j = 1 To 5

'изменение номера столбца

a(i, j) = Int(101 * Rnd + 0) c(i, j) = a(i, j) * B(i) Sheets(1).Cells(i, j) = a(i, j) Sheets(1).Cells(i, j + 8) = c(i, j) Next j

Sheets(1).Cells(i, 7) = B(i) 'вывод массива B(i) в 7 столбце Next i

End Sub

Пример 7

Сформировать матрицу А[10х10]. Найти минимальный элемент всей матрицы и

поменять местами с минимальным элементом пятой строки

'Определение положения минимального элемента в массиве

min = a(1,1) For i = 1 To 10 For j = 1 To 10

If min<a(i,j) then str = i

stl = j

End IF

Next j

Next i

'Определение положения минимального элемента в 5 строке

min5 = a(5,1) For j = 1 to 10

If min5<a(j) then stl5 = j

End IF

Next j

'Меняем элементы местами prom = a(str,stl)

a(str,stl) = a(5,stl) a(5,stl) = prom

End Sub

9

Соседние файлы в папке лекции