Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA Л19 Л20.docx
Скачиваний:
5
Добавлен:
02.12.2018
Размер:
254.92 Кб
Скачать

Поиск в массивах

Пример. Составить программу поиска индекса элемента массива, значение которого совпадает с заданным.

Возьмем символьный массив, содержащий алфавит, и определим номер заданной буквы по порядку алфавита.

В первом цикле программы произведем заполнение строкового массива буквами русского алфавита.

Затем введем искомую букву и во втором цикле произведем ее сравнение со всеми элементами массива. В случае совпадения присвоим переменной N значение индекса данного элемента. Выведем результат на печать.

Dim strA (l To 33), strB As String I, N As Byte

Sub Command1_Click()

'заполнение массива

For I = 1 To 33

strA(I) = InputBox ("Введите следующую букву", _ "Заполнение массива")

Next I

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

strB = InputBox ("Введите искомую букву", "Поиск")

For I = 1 То 33

If strB = strA(I) Then N = I

Next I

Form1.Print "Номер искомого элемента "; strB; N

End Sub

Осуществим теперь поиск наименьшего элемента в числовом массиве, который заполним целыми случайными числами в цикле с использованием генератора случайных чисел функции Rnd и функции выделения целой части числа Int.

Будем считать сначала, что минимальный элемент равен первому элементу массива bytA (1) и присвоим переменной Min его значение.

Затем в цикле сравним последовательно элементы массива со значением переменной Min, если какой-либо элемент окажется меньше, присвоим его значение переменной Min, а его индекс присвоим переменной N. Распечатаем результаты.

Dim bytA (l To 100), Min, I, N As Byte

Sub Command1_Click()

'заполнение массива

For I = 1 To 100

bytA(I) = Int (Rnd*100)

Next I

'поиск минимального элемента

Min = bytA(1)

For I = 2 To 100

If bytA (I) < Min Then Min = bytA(I) : N = 1

Next I

Form1.Print "Минимальный элемент "; Min; "его индекс"; N

End Sub

Сортировка массива

Рассмотрим задачу упорядочения (сортировки) числового массива по возрастанию значений его элементов. Пусть у нас имеется целочисленный числовой массив bytA(I), состоящий из десяти элементов и заполненный случайными числами. Представим массив в виде таблицы (табл. 3.7).

Идея алгоритма сортировки состоит в следующем. Проводим поиск минимального элемента в массиве с 1 по 10 элементы. Далее меняем найденный минимальный элемент местами с элементом с индексом 1 (выполняем перестановку).

Проводим поиск минимального элемента среди элементов со 2 по 10 и делаем перестановку.

Таблица 3.7. Алгоритм сортировки массива по возрастанию

I

1

2

3

4

5

6

7

8

9

10

Значение счетчика цикла

BytA(I)

70

53

57

28

30

77

1

76

81

70

До сортировки

 

70 1

1

 

 

53 28

2

 

 

 

57 30

3

 

 

 

 

53

4

 

 

 

 

 

57

5

 

 

 

 

 

 

77 70

6

 

 

 

 

 

 

 

77 70

7

 

 

 

 

 

 

 

 

76

8

 

 

 

 

 

 

 

 

 

81 77

9

BytA(I)

1

28

30

53

57

70

70

76

77

81

После сортировки

Повторяем процедуру поиска минимального элемента среди оставшихся неупорядоченных элементов многократно. Повторение реализуем с помощью цикла со счетчиком, максимальное значение которого составляет N – 1, где N — количество элементов массива (в рассматриваемом случае цикл повторяется 9 раз). В результате массив упорядочивается.

Структура программного модуля получается следующей. Поиск минимального элемента массива проводится многократно, поэтому реализуем его как общую процедуру МинЭлемент (J, N As Byte), где J является входным параметром, а N — выходным параметром.

Событийная процедура Command1_Click() содержит циклы заполнения массива, сортировки и печати.

Dim bytA (l To 100), I, R, N As Byte

Sub Command1_Click()

'заполнение массива

For I = 1 To 10

bytA(I) = Int (Rnd*100)

Next I

'сортировка

For I = 1 To 9

'вызов общей процедуры поиска минимального элемента

Call МинЭлемент (J, N)

'перестановка

R = bytA(I)

bytA(I) = bytA(N)

bytA(N) = R

Next I

'печать

For I = 1 To 10

Form1.Print "Индекс:"; I; "Значение элемента:"; bytA(I)

Next I

End Sub

Двумерные массивы и вложенные циклы

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

Объявляются двумерные массивы так же, как переменные и одномерные массивы. Например, целочисленный числовой массив, содержащий 9 строк и 9 столбцов, объявляется следующим образом:

Dim bytA (l To 9, 1 То 9) As Byte

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

Dim bytA (l To 9, 1 То 9) As Byte

Sub Command1_Click()

For К = 1 To 9

For N = 1 To 9

bytA(K, N) = К*N

Form1.Print K; "*"; N; "="; bytA(K, N)

Next N

Next К

End Sub

Во внешнем цикле счетчик К примет 9 различных значений, для каждого из которых счетчик N внутреннего цикла примет также 9 значений. Таким образом, тело вложенных циклов будет выполнено k*n раз, т.е. 81 раз.

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