• Ешқандай Нәтиже Табылған Жоқ

РАЗДЕЛ 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

Матрицы – двумерные массивы вводятся и выводятся с помощью вло- женных циклов: один перебирает строки, другой – столбцы матрицы. Какой из циклов внешний – неважно, главное – вложенные циклы позволяют пере- числить все сочетания номеров строк и столбцов, т.е. учесть все элементы матрицы. Рассмотрим, например, матрицу М размера 57.

Ввод и вывод двумерного массива (матрицы) Ввод матрицы с клавиатуры:

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 ГРАФИЧЕСКИЕ ПРИМИТИВЫ, СВОЙСТВА ОБЪЕКТОВ