Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_VB.doc
Скачиваний:
22
Добавлен:
01.04.2025
Размер:
1 Мб
Скачать
☆

Работа с массивами

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

Массивы бывают одномерные (вектор ) и многомерными (матрица размером - двумерный массив). Отсюда видно, что массив состоит из пронумерованной последовательности элементов, номера называются индексами, массив иначе можно назвать переменной с индексом.

Массив обозначается ИмяМассива(Индекс)

Например: arrA(I), arrMatr(I,J)

Массивы могут быть различных типов: числовые, строковые, и т.д. Индексы являются целыми числами. Каждый элемент массива принимает собственное значение, например: arrA(5)=12.8 или arrStroka= “д”

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

Существуют две разновидности массивов: статические и динамические.

Статические массивы

При объявлении такого массива значения его верхней и нижней границ не могут быть изменены в программе. Данный вид массива описывается с помощью ключевых слов Dim, Private, Public или Static.

Например: Dim arrA(9) As Byte Dim arrB(1 To 10) As Byte

В данном случае оба массива содержат одно и то же количество элементов одинакового типа, однако нумерация элементов arrA начинается с 0, а массива arrB с 1.

Динамические массивы

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

  1. Объявить массив с использованием одного из ключевых слов, например Dim, но без указания размерностей

  2. В нужном месте процедуры описать данный массив с требуемым значением размерности при помощи оператора ReDim

Например:

Dim arrA() As Byte ‘ описание типа массива

ReDim arrA(5) ‘ указание размерности

Заполнение массива

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

Заполнение с клавиатуры осуществляется с помощью функции InputBox.

Например: Заполнение двумерного массива размерностью

Dim intN, intM, intI , intJ As Integer

Dim strIJ As String

Dim arrA() As Single

Private Sub cmdok_Click()

intN = Val(txtn.Text)

intM = Val(txtm.Text)

ReDim arrA(1 To intN, 1 To intM)

Print

Print "Исходные данные"

For intI = 1 To intN

For intJ = 1 To intM

strIJ = InputBox("Ввод элемента a" & intI & intJ & " :", "Ввод массива")

arrA(intI, intJ) = CSng(strIJ)

Next intJ

Next intI

For intI = 1 To intN

For intJ = 1 To intM

Print arrA(intI, intJ);

Next intJ

Print

Next intI

Заполнение с помощью оператора присваивания. Например: Вычислить элементы квадратной матрицы: , где

Dim arrA() As Single

Dim sngS As Single

Dim intI, intJ, intk, intN As Integer

Private Sub cmdC1_Click()

intN = Val(txtT1.Text)

intk = Val(txtT2.Text)

ReDim arrA(1 To intN, 1 To intN)

Print

Print Tab(5), "матрица a"

For intI = 1 To intN

For intJ = 1 To intN

arrA(intI, intJ) = (-1) ^ (intI + intJ) * (intI * intN + intJ * intK)

Print " " + Format(arrA(intI, intJ), "##0.###");

Next intJ

Print

Next intI

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

Поиск в строковых массивах обычно реализуется в форме поиска индекса элемента массива, значение которого совпадает с заданным. Например, в строковом массиве, содержащем буквы русского алфавита, осуществляется поиск заданной буквы и определяется ее порядковый номер в алфавите. Алгоритм поиска представлен на рисунке 2. В числовых массивах обычно производится поиск наименьшего или наибольшего элемента. Например: пусть задан массив целых чисел: 13, 23, 4, 8, 19, 55. Определить наименьший элемент массива и его индекс. Алгоритм поиска представлен на рисунке 3.

Рис.2

Рис. 3

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

Рассмотрим задачу упорядочивания (сортировки) числового массива по возрастанию значений его элементов. Пусть у нас имеется целочисленный массив arrA(bytI), состоящий из N элементов и заполненный случайными числами. Идея алгоритма состоит в следующем. Проводим поиск минимального элемента в массиве среди элементов с первого по N-й и меняем его местами с элементом с индексом 1, т.е. ставим минимальный элемент на первое место, далее находим минимальный элемент среди элементов со 2-го по N-й и ставим его на второе место и так повторяем процедуру N-1 раз (последний элемент не с чем сравнивать). В результате массив упорядочивается. Программный модуль формы должен содержать: событийную процедуру заполнения массива случайными числами, событийную процедуру сортировки и общую процедуру поиска минимального элемента:

Dim bytA(1 To 10), bytMin, bytI, bytJ, bytK, bytR, bytN As Byte

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

Sub МинЭлемент(bytJ, bytN As Byte)

bytMin = bytA(bytI)

bytN = bytI

For bytJ = bytI + 1 To 10

If bytA(bytJ) < bytMin Then

bytMin = bytA(bytJ)

bytN = bytJ

End If

Next bytJ

End Sub

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

Private Sub cmd1_Click()

txt1.Text = ""

For bytI = 1 To 10

bytA(bytI) = Int(Rnd * 10)

txt1.Text = txt1.Text + CStr(bytA(bytI))

Next bytI

End Sub

'событийная процедура сортировки

Private Sub cmd2_Click()

txt2.Text = ""

For bytI = 1 To 9

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

Call МинЭлемент(bytJ, bytN)

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

bytR = bytA(bytI)

bytA(bytI) = bytA(bytN)

bytA(bytN) = bytR

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

Next bytI

For bytK = 1 To 10

txt2.Text = txt2.Text + Str(bytA(bytK))

Next bytK

End Sub

Private Sub cmd3_Click()

End

End Sub

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

Задача. Упорядочить по возрастанию элементы одномерного массива arrX(bytI), где xi=sini+cosi Алгоритм решения следующий:

Примеры на работу с массивами

Задача 1. Определить число слов в тексте, если между словами один пробел.

Dim strA, strB As String

Dim intk, intl, inti As Integer

Private Sub cmd1_Click()

strA = txt1.Text

intl = Len(strA)

intk = 1

For inti = 1 To intl

strB = Mid(strA, inti, 1)

If strB = " " Then intk = intk + 1

Next inti

txt2.Text = CStr(intk)

End Sub

Private Sub cmd2_Click()

End

End Sub

Задача 2. Дана матрица n x m, элементы которой вводятся с клавиатуры. В матрице поменять местами первый и последний элементы и вычислить сумму элементов первого столбца.

Dim intN, intM, intI, intj As Integer

Dim strIJ As String

Dim arrA() As Single

Dim sngp, sngs As Single

Private Sub cmd2_Click()

End

End Sub

Private Sub cmd1_Click()

Cls

intN = Val(txt1.Text)

intM = Val(txt2.Text)

ReDim arrA(1 To intN, 1 To intM)

Print

Print "Исходные данные"

For intI = 1 To intN

For intj = 1 To intM

strIJ = InputBox("Ввод элемента a" & intI & intj & " :", "Ввод массива")

arrA(intI, intj) = CSng(strIJ)

Print arrA(intI, intj);

Next intj

Print

Next intI

sngp = arrA(1, 1)

arrA(1, 1) = arrA(intN, intM)

arrA(intN, intM) = sngp

Print

Print "Первый и последний элементы поменялись местами"

For intI = 1 To intN

For intj = 1 To intM

Print arrA(intI, intj);

Next intj

Print

Next intI

sngs = 0

For intI = 1 To intN

sngs = sngs + arrA(intI, 1)

Next intI

Print "Сумма элементов первого столбца ="; sngs

End Sub