Присвоение массивов
Начиная с Visual Basic 6.0, вы имеете возможность присвоить содержимое одного массива другому так же, как вы присваиваете значение одной переменной другой. Например, вам необходимо скопировать массив байтов. Это можно сделать, копируя байт за байтом:
Sub ByteCopy(oldCopy() As Byte, newCopyO As Byte) Dim i As Integer
ReDim newCopy (Lbound(oldCopy) To UBound(oldCopy)
For i k Lbound(oldCopy) To Ubound(oldCopy)
newCopy(i) = oldCopy(i) Next
End Sub
Однако гораздо проще и привлекательней это выглядит, если присвоить один массив другому:
Sub ByteCopy(oldCopy() As Byte, newCopyO As Byte)
newCopy = oldCopy
End Sub
Существуют определенные правила присвоения переменных, которые нестоит забывать. Например, если присвоение переменной, объявленной как Long, значения переменной типа Integer осуществляется без всяких проблем, то присвоение значения переменной типа Long переменной типа Integer легко
может вызвать ошибку переполнения (overflow). В дополнение к правилам работы с типами данных, при присвоении массивов необходимо учитыватьразмерности массивов, количествоэлементов в массивах разных размерностей и тип массива — статический или динамический. Попытка присвоения массивов различных размерностей и типов данных может быть успешной или неуспешной в зависимости от следующих факторов:
-
• типа массива, используемого в левой части оператора присваивания (статический или динамический);
-
• совпадения/несовпадения количества размерностей массивов в левой и правой части оператора присваивания;
-
• совпадения/несовпадения количества элементов в каждой размерности массивов;
-
• типов данных элементов массивов (типы должны быть совместимыми).
Массивы в vb 6.0 ( Ишо раз)
Во многих случаях совокупность переменных удобнее объединить в массив, именуя все элементы совокупности общим именем (именем массива) и индексами (номерами в массиве).
Массивом называется конечная упорядоченная совокупность данных одного типа, доступ к каждому элементу которой осуществляется по имени массива с индексом.
Индекс элемента в массиве позволяет обратиться к нему непосредственно. По индексу массив строго упорядочен.Массив имеет верхнюю и нижнюю границу (максимальное и минимальное значение индекса).
По умолчанию в VB применяется так называемая нумерация с нулевой базой, т.е. элементы массива нумеруются, начиная с 0.
Одномерные массивы
Одномерный массив – это просто список элементов данных. Для доступа к этим данным, хранящимся в определенном элементе массива, следует указать имя массива с последующим числом (индексом), заключенным в круглые скобки.
Элементы массива можно использовать в любом выражении точно также как и значение константы или переменной.
Например, a(0) = 11.2 a(1) = 10.2 a(3) = 22.1 a(4) = 1.1
Y = a(0) * 2 – a(1)
Многомерные массивы
Часто бывает необходимо представить таблицы данных в формате строк и столбцов. Для этого используют многомерные массивы.
Доступ к элементам двумерного массива, например, осуществляется уже с помощью двух индексов. Первый индекс отвечает за строку, второй – за столбец: а(1,3) а(0,4) и т.д. VB позволяет создавать массивы, имеющие до 60 измерений (индексов).
Массивы с фиксированным и переменным числом элементов
Все массивы, которые используются в программе, должны быть непременно описаны. Для этого используется оператор Dim.
Синтаксис:
Dim Name ([Subscript]) [As type]
где Name - имя массива, Subscript – измерения (индексы) массива. Для одномерного массива один индекс, для двумерного – два, отделенные друг от друга запятой, и так далее.
Можно объявлять также массивы, используя ключевые слова Public, Private и Static – точно так же, как для любой другой переменной и с тем же влиянием на область действия.
Синтаксис Subscrit:
[lower To] upper [,[lower To] upper]…
lower - определяет нижний диапазон допустимых индексов массива,
upper - верхний предел.
Dim A [0 To 10] As Integer
Dim B [1 To 5, 1 To 5] As Real
Оператор Option Base
Начальное значение для элементов массива без указания lower в описании индексов можно задать, также используя, оператор Option Base в области описаний проекта.
Синтаксис:
Option Base 0 1.
Необходимо помещать этот оператор в область объявлений перед объявлением любых переменных, констант или процедур. Можно иметь только один оператор Option Base в программе, он влияет на описание всех массивов, объявляемых в программе, независимо от того, являются они локальными в процедуре или объявлены глобально.
При использовании оператора Option Base нижний диапазон lower To в операторе Dim не указывается.
Примеры объявления массивов:
Dim s(1 To 100) As String
Dim st(0 To 15, 0 To 15) As String
Static Matr_1(2, 2) As Double
Static Matr_2(1 To 3, 1 To 4) As Real
Dim V (1 To 3, 1 To 10,1 To 15)
Динамический массив
При объявлении массивов следует помнить, что включение оператора Subscrit в объявление массива создает массив с фиксированным числом элементов, пропуск оператора Subscrit в объявлении массива создает динамический массив.
Dim Matrix ()As [Тип]
Такие массивы используются, когда заранее неизвестно количество элементов массива. Размерность массива необходимо устанавливать позднее в программе с помощью исполняемого оператора Redim внутри процедуры перед тем как этот массив использовать.
Redim Matrix (X+1)
Для контроля за размерами массивов переменной размерности в VB есть две функции LBound и UBound, которые возвращают нижнее и верхнее граничные значения индексов соответственно.
Синтаксис
Lbound(A_Name [, dimension])
Ubound(A_Name [, dimension])
Функция Lbound возвращает первый индекс массива, Ubound возвращает наибольший индекс массива. Аргумент dimension представляет целое число, определяющее измерение массива, для которого необходимо получить нижний или верхний предел. Если аргумент опущен, возвращается предел для первого измерения массива.
|
Dim A(3 to 9) As String For I = Lbound(A) To Ubound(A) A(I) = 0 Next I |
Очистка одномерного массива А *** |
|
Dim a_m(1 to 365, 2000 To 2004) For i= Lbound(a_m, 1) To Ubound(a_m, 1) For j = LBound(a_m, 2) To Ubound(a_m, 2) a_m(i,j) = Rnd Next j Next i |
Заполнение двумерного массива a_m случайными числами |
Функция Rnd возвращает значение (тип Single), содержащее случайное число меньшее 1 и большее или равное нулю. Если необходимо получить последовательность случайных чисел в некотором диапазоне [a, b] следует использовать формулу
Int((b-a +1) * Rnd +a).
Перед вызовом функции следует использовать оператор Randomize без аргументов для инициализации генератора случайных чисел.
Для обработки массивов обычно используются циклы For Next. Для двумерных их должно быть два и один вложен в другой.
Оператор Erase
В случае массивов с фиксированным размером оператор Erase позволяет очищать все элементы массива. Его действие аналогично ***.
В случае динамических массивов оператор Erase позволяет полностью массив и его содержимое из оперативной памяти.
Синтаксис Erase a1[, a2, …], т.е. за один раз можно очистить (удалить) несколько массивов.
Ввод и вывод массивов
Пример 1.
Одномерные массивы
Найти максимальный элемент в одномерном массиве
|
Option Base 1 Dim a(10) As Single Private Sub Command1_Click() n = Val(Text1.Text) av = Split(Text2.Text, " ") For i = 1 To n a(i) = val(av(i - 1)) Next Max = a(1) k = 1 For i = 1 To n If a(i) > Max Then Max = a(i) k = i End If Next i Picture1.Print "Максимальный элемент "; Max Picture1.Print "Его номер "; k End Sub |
|
Для ввода были использованы два элемента управления TextBox. Первый - для указания числа элементов, из которых состоит массив. Во втором – вводится строка, состоящая из элементов массива разделенных пробелом.
Функция Split разделит строку Text2.Text по указанному разделителю (пробелу) на массив подстрок. Подстрок будет столько, сколько было введено элементов через указанный разделитель. Массив подстрок индексируется с нуля!
И только после этого цикл определит элементы массива.
Пример2.
Сортировка методом пузырька
Метод основан на сравнении соседних элементов. «Неправильно» расположенные по отношению друг к другу элементы меняются местами. Во вложенных циклах поочередно фиксируется пара соседних элементов массива. В результате первого прохода элемент с минимальным значением оказывается в первой позиции массива (всплывает).
Вывод массива осуществляется в PictureBox в столбик.
|
Const n = 10 Dim a(1 To n) As Byte Private Sub Command1_Click() Randomize For i = 1 To n a(i) = Int(Rnd * 40) Picture1.Print a(i) Next i End Sub Private Sub Command2_Click() Dim r As Byte For i = 1 To n For j = 1 To n - 1 If a(j) > a(j + 1) Then r = a(j) a(j) = a(j + 1) a(j + 1) = r End If Next j Next i For i = 1 To n Picture2.Print a(i) Next i End Sub |
|
Двумерные массивы
Для обработки двумерных массивов чаще всего используют два вложенных друг в друга циклач For…Next , каждый из которых позволяет перебирать элементы в массиве по соответствующему индексу строки или столбца.
Пример3. Вычислить произведение положительных элементов матрицы
Dim a(50,50) As Single
Private sub command1_click()
n=val(text1.text)
m=val(text2.text)
P=1
For i=0 to n-1
For j=0 to m-1
Txt= ”задайте элемент из строки ” & str(i+1) & “ и столбца “ & str(j+1)
A(i,j)= val(inputbox(txt))
Picture1.Print Format (a(i,j), “##.#”);
If a(i,j)>0 then p=p*a(i,j)
Next j
Picture1.print
Next i
Picture1.Print “Произведение положительных”; p
End sub
В текстовых окнах задается количество строк и столбцов массива, элементы массива задаются по одному в окне InputBox, массив и результат печатаются в графическое окно:
При этом для вывода двумерного массива в виде таблицы или матрицы метод Print используется внутри цикла по столбцу, причем в конце списка вывода ставится точка с запятой, которая означает, что вывод идет в одну и ту же строку. В конце цикла по строкам ставится пустой Print для перевода курсора вывода в начало следующей строки.
Пример4.
Транспонирование матрицы (перемены местами строк и столбцов)
Dim a(1 To 2, 1 To 3), b(1 To 3, 1 To 2) As Single
Dim i As Integer, j As Integer
For i = 1 To 2
For j = 1 To 3
a(i, j) = Rnd * 10 + 1
b(j, i) = a(i, j)
Next j
Next i
For i = 1 To 3
For j = 1 To 2
Print b(i, j);
Next j
Next i
Массивы элементов управления
Элементами массива могут быть и элементы управления, располагаемые на форме. Если при разработке формы элемент управления скопировать в буфер обмена (Clipboard), то перед его вставкой VB-редактор выдаст следующее сообщение:

|
Так VB предупреждает о том, что элемент управления с именем Text1 уже имеется на форме, и предлагает создать массив элементов типа TextBox с именем Text1. Если ответить «Да», то VB создаст массив элементов управления с именем скопированного в буфер обмена элемента. Первым (с индексом 0) элементом массива будет скопированный элемент управления, вторым (с индексом 1) – вставляемый элемент. Далее можно продолжить операцию вставки и разместить на форме несколько однотипных элементов. |
|
Если ответить «Нет», то VB создаст элемент управления с именем Text2.
Работать с массивом элементов управления можно также как и с обычным массивом. Только в данном случае речь идет о массиве объектов, которые обладают свойствами, методами и событиями.
|
Private Sub Command1_Click() Dim i As Integer Picture1.Cls a = Val(Text1.Text) b = Val(Text2.Text) 'Какая кнопка выбрана For i = 0 To 3 If Option1.Item(i) Then Exit For End If Next Select Case i Case Is = 0 Label1.Caption = "+" Label1.Visible = True x = Val(Text1) + Val(Text2) Case Is = 1 Label1.Caption = "-" Label1.Visible = True x = Val(Text1) - Val(Text2) Case Is = 2 Label1.Caption = "*" Label1.Visible = True x = Val(Text1) * Val(Text2) Case Is = 3 Label1.Caption = "/" Label1.Visible = True x = Val(Text1) / Val(Text2) Case Else: MsgBox ("Выберите операцию") End Select Label2.Visible = True Picture1.Print x End Sub
Private Sub Command2_Click() Picture1.Cls Label1.Visible = False Label2.Visible = False Text1.Text = "" Text2.Text = "" End Sub
Private Sub Form_Load() Option1(0).Caption = "Сложить" Option1(1).Caption = "Вычесть" Option1(2).Caption = "Умножить" Option1(3).Caption = "Разделить" Label1.Visible = False Label2.Visible = False
End Sub |
|




