РАЗДЕЛ 1. ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ. ЛЕКЦИОННЫЙ КУРС ПО
1.6 Массивы данных, создание и использование вызываемых процедур и
Массив - упорядоченная совокупность однотипных данных, обозначен- ных одним именем. Имя массива образуется по тем же правилам, что и имена переменных.
Отдельные величины, образующие массив, называются элементами массива.
Каждый элемент в массиве имеет номер (индекс), по которому можно обратиться к значению элемента. Индекс - числовое значение целого типа.
42
Количество элементов в массиве называется размером массива. Масси- вы бывают:
− одномерные, элемент определяется одним индексом (можно срав- нить с таблицей из одной строки.
− двумерные - два индекса определяют элемент (таблица из несколь- ких строк и столбцов).
Перед использованием в программе массив должен быть объявлен опе- ратором DIM, который резервирует память.
Dim ИмяМассива (границы) [As тип]
Статические массивы
При объявлении статического массива можно указывать границы (верхнюю и нижнюю).
Пример:
DIM A(10 TO 15) одномерный массив, индексы элементов с 10 до 15 DIM B(12) одномерный массив из 13 элементов (если верхняя граница не указана, то она = 0)
DIM C(3,10) двумерный массив из 4-х строк и 11-ти столбцов
DIM N(5 TO 10, 3 TO 13) двумерный массив из 6-х строк и 11-ти столбцов
Ввод массива
Существует два основных способа заполнения массива.
1. В первом случае значения элементов последовательно вводятся с клавиатуры. На первом шаге указывается количество элементов в массиве и соответствующим образом переопределяется размер массива. На втором ша- ге организуется цикл, на каждом шаге которого вводится значение одного элемента. Размер массива храниться в переменной n. Для организации цикла For потребуется счетчик i.
Dim n, i As Integer Dim a() As Integer
n= Val(InputBox("Введите размерность массива")) For i = 0 To n
a(i) = Val(InputBox("Введите " + i + "-й элемент массива")) Next i
2. Второй способ ввода массива – это заполнение случайными чис- лами. В Visual Basic есть специальная функция, которая по определенным правилам генерирует рациональные случайные числа в диапазоне (0; 1). Она называется Rnd(). Используя эту функцию, можно заполнить массив случай- ными числами из любого диапазона. Начало и конец диапазона значений за- даются с клавиатуры.
start = Val(InputBox("Введите начало диапазона")) fin = Val(InputBox("Введите конец диапазона")) Randomize()
For i = 0 To n
43
a(i) = Math.Round(start + (fin - start) * Rnd()) Next i
Вывод массива
Массивы можно выводить в окно списка или в текстовое поле.
Вывод массива в окно списка практически не отличается от вывода со- вокупности.
Сначала очищаем окно списка. lstA.Items.Clear()
Выводим в окно списка поясняющий текст и заголовки колонок.
lstA.Items.Add("Исходный массив")
lstA.Items.Add("Номер" + vbTab + "Значение") 'Константа vbTab поз- воляет организовать вывод в две колонки.
Организуем цикл для вывода значений элементов массива For i = 0 To n
lstA.Items.Add(Str(i) + vbTab + Str(a(i))) Next i
На каждом шаге цикла в окно списка выводим номер элемента – i и его значение – a(i).
Для вывода массива в текстовое поле нам потребуется специальная пе- ременная, в которой будет формироваться выводимая строка. Так как массив выводится в текстовое поле, то эта переменная будет иметь символьный тип данных, а точнее – String. Dim s As String.
Сначала в этой строке нет никакой информации. Она пустая. Пустая строка обозначается парой кавычек, между которыми нет ни одного символа.
Организуем цикл для формирования строки выводимой информации.
s = ""
For i = 0 To n s = Str(a(i)) + " "
Next i
txtA.Text = s
Матрицы – двумерные массивы вводятся и выводятся с помощью вло- женных циклов: один перебирает строки, другой – столбцы матрицы. Какой из циклов внешний – неважно, главное – вложенные циклы позволяют пере- числить все сочетания номеров строк и столбцов, т.е. учесть все элементы матрицы. Рассмотрим, например, матрицу М размера 57.
Ввод и вывод двумерного массива (матрицы) Ввод матрицы с клавиатуры:
For i = 1 To 5 ‘перебираем строки For j = 1 To 7 ‘перебираем столбцы
М(i,j) = InputBox("Введите элемент матрицы") Next
44
Динамические массивы
Массив, размер которого можно менять в процессе работы программы, называется динамическим. Динамические массивы используются, когда зара- нее неизвестно какой длины он должен быть.
Для создания динамического массива следует:
− объявить массив без указания размерности массива Dim ИмяМас- сива ( )
− c помощью оператора ReDim назначить действительное число эле- ментов массива
Оператор ReDim изменяет количество элементов в массиве, при этом можно в качестве границ массива можно указывать не числа, а переменные.
Один и тот же массив можно переопределять в одной программе несколько раз. Если вы хотите при переопределении границ сохранить значения, уже присвоенные элементам массива, нужно воспользоваться ключевым словом Preserve (сохранить), в противном случае после переопределения границ массива все его значения будут утеряны.
ReDim Preserve ИмяМассива (границы) Тип массива менять нельзя.
Если необходимо освободить память, занимаемую динамическим мас- сивом, то можно использовать оператор Erase.
Erase ИмяМассива
Память, занимаемая статическим массивом, не освобождается. Вместо этого Erase присваивает элементам массива «пустые» значения (для число- вых массивов – 0, для строковых – пустая строка)
Массивы объектов
В Visual Basic разрешается определять массивы объектов (элементов управления), что весьма удобно, если в программе имеются группы объектов, действующих примерно одинаково. Такие массивы позволяют «привязывать»
разные элементы управления к одной процедуре обработки события.
Существует два способа создания массива объектов:
1. установить на форму первый элемент управления, полностью описать его свойства, скопировать его необходимое количество раз и расста- вить на форме уже готовые копии
2. установить объект, изменить необходимые свойства, установить следующий объект, присвоив ему такте же имя (Name) как и у первого объ- екта.
Элементы массива объектов имеют одинаковые имена, различаются по индексу (Index), остальные свойства могут совпадать или отличаться. Для обращения к элементу массива объектов необходимо указать имя объекта и в круглых скобках индекс.
Создание и использование вызываемых процедур и функций
Любая программа на Visual Basic является процедурой или функцией.
45
В предыдущих разделах рассматривались процедуры обработки собы- тий, которые в процессе выполнения программы запускались в результате свершения некоторого определенного события (щелчок мыши, нажатие кла- виши и т.п.). Однако в Visual Basic имеется возможность выделить неодно- кратно повторяющиеся фрагменты программы в определенным образом ор- ганизованные функциональные блоки операторов, которые можно использо- вать без их повторного написания и отладки. При этом сложные программы получаются более компактными. Организовать функциональные блоки в Visual Basic можно в виде процедур (Procedure) и функции (Function).
Процедура или функция, как и цикл, предназначены для неоднократно- го исполнения набора каких-то операторов. Отличие от цикла состоит в том, что сама по себе процедура (функция) операторы не повторяет, а объединяет их в единую группу, которую можно выполнить в любой момент, т.е. она действует при вызове. Такие функции и процедуры называют вызываемые или процедурами общего назначения.
Прекращение выполнения вызванной процедуры или функции (Воз- врат) означает возвращение в вызывающую процедуру или функцию, выпол- нение которой продолжается с оператора, следующего за вызывающим опе- ратором.
Программный код процедур и функций, не являющихся процедурами обработки событии, помещается в раздел General списка Object в окне про- граммного кода.
Процедуры SUB Общий формат процедуры SUB:
SUB ИмяПроцедуры (параметры) операторы
END SUB
Процедура SUB вызывается как отдельный оператор и не может быть использована как часть выражения.
Вызов процедуры SUB:
1 способ
CALL ИмяПроцедуры(аргументы) 2 способ
ИмяПроцедуры аргументы
Список аргументов определяет связь по данным между процедурами.
По количеству, порядку следования и типу параметры и аргументы должны совпадать. Процедура SUB может возвращать несколько значений в вызыва- ющую подпрограмму, производя вычисления над переменными из списка ар- гументов. Это единственная возможность для SUB переслать значения.
Exit Sub вызывает прекращение выполнения процедуры и выход из нее в вызывающую программу.
46
Функции
Функции целесообразно создавать, когда необходимо многократно вы- числять одно и тоже выражение при различных значениях параметров.
Общий формат процедуры FUNCTION
FUNCTION ИмяФункции [(список параметров)] [As тип]
[операторы объявления]
[операторы]
ИмяФункции = выражение END FUNCTION
Параметры - значения, которые передаются функции при ее вызове.
Выражение - возвращаемое значение функции Список параметров имеет следующий синтаксис:
имя[( )][As тип], имя[( )][As тип]…
Имя - имя переменной или массива без указания границ значения ин- дексов
Список аргументов определяет связь по данным между вызывающей (функция, из которой происходит вызов) и вызываемой (функция, которая вызывается) процедурами или функциями.
Exit Function вызывает прекращение выполнения функции и выход из нее в вызывающую программу.
Функция вызывается точно также, как и любая встроенная функция, т.е. она является операндом выражения с указанием списка аргументов. Спи- сок аргументов и список параметров должны соответствовать по количеству, порядку следования и типу.
Рекурсивные процедуры и функции
Объект называется рекурсивным, если он целиком или частично опре- деляется через самого себя. Объекты, которые определяются через себя це- ликом, практического интереса не представляют, т.к. являются бесконечны- ми.
Рекурсивная функция (процедура) – это такая функция (процедура), среди выполняемых операторов которой есть оператор вызова самой этой функции (процедуры. Среди этих выполняемых операторов обязательно должно быть условие завершения (продолжения) рекурсии. Последователь- ность рекурсивных вызовов называется рекурсивным спуском. Номер рекур- сивного вызова в этой последовательности называется глубиной рекурсии.
Операторы, расположенные после оператора рекурсивного вызова, выпол- няются в порядке, обратном тому, в котором происходят рекурсивные вызо- вы. Говорят, что действие выполняется на рекурсивном подъеме.
47
2 ГРАФИЧЕСКИЕ ПРИМИТИВЫ, СВОЙСТВА ОБЪЕКТОВ