- •1. Простейшие конструкции языка Visual Basic
- •2. Функции языка Visual Basic
- •Функции преобразования типов данных
- •Функции даты и времени
- •3. Основные типы алгоритмических структур
- •If Условие Then
- •If Условие Then Действие 1 _
- •Цикл со счетчиком на языке vba.
- •Цикл со счетчиком на языке Visual Basic.
- •Циклы с условием на языке Visual Basic.
- •3.2 Работа с массивами Заполнение массива
- •Поиск в массивах
Поиск в массивах
Пример. Составить программу поиска индекса элемента массива, значение которого совпадает с заданным.
Возьмем символьный массив, содержащий алфавит, и определим номер заданной буквы по порядку алфавита.
В первом цикле программы произведем заполнение строкового массива буквами русского алфавита.
Затем введем искомую букву и во втором цикле произведем ее сравнение со всеми элементами массива. В случае совпадения присвоим переменной 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 раз.