В мир информатики # 89 (1—15 апреля).
Школа программирования

Oсновы программирования
на Visual Basic

Н.М. Тимофеева,
г. Обнинск Калужской обл.

Продолжение. Начало см. “В мир информатики” № 69–73, 78–80, 83, 85 (“Информатика” № 4–8, 19–21, 24/2006, 3–4, 6/2007)

Массивы

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

1) набор карточек с изображением специальных символов:

2) команда теннисистов: Саша, Дима, Юля, Женя, Сережа, Федя;

3) квадраты на шахматной доске:

4) члены арифметической прогрессии: T1 = 5, T2 = 11, T3 = 17, T4 = 23, T5 = 29, …

Использование массивов в программах, как правило, значительно сокращает объем кода и упрощает метод решения некоторых задач. Вы научитесь распознавать задачи, для решения которых лучше всего применять массивы. Почти все приложения, с которыми мы в дальнейшем будем иметь дело, будут использовать хотя бы один массив. Конечно, и многие из уже рассмотренных задач также могли быть решены с применением этой структуры.

В Visual Basic существуют массивы переменных и массивы элементов управления. Каждый массив имеет имя. Каждый элемент массива отличается уникальным порядковым номером — индексом (в Visual Basic индекс — величина целого типа). Массивы иногда называют индексированными переменными.

Следующие примеры кода включают массивы, рассмотренные в начале статьи. Обратите внимание на способ индексирования каждого элемента массива. Нетрудно заметить сходство со способом, каким были пронумерованы пункты списка в проекте 10 “Вечный календарь”.

1. Карточки с изображением специальных символов — массив элементов управления:

Image: imgКарта(1).Picture = LoadPicture("Авторское_право.ico")

imgКарта(2).Picture = LoadPicture("Запатентованная_торговая_марка.ico")

imgКарта(3).Picture = LoadPicture("Параграф.ico")

imgКарта(4).Picture =

LoadPicture("Конец абзаца.ico")

2. Команда теннисистов — массив переменных символьного (строкового) типа:

Static Теннисист(1 To 6) As String

Dim I As Integer, J As Integer

Теннисист(1) = "Саша"

Теннисист(2) = "Дима"

Теннисист(3) = "Юля"

Теннисист(4) = "Женя"

Теннисист(5) = "Сережа"

Теннисист(6) = "Федя"

picТурнир.Print "Теннисный турнир"

For I = 1 To 5

For J = I + 1 To 6

picТурнир.Print Теннисист(I); " — "; Теннисист(J)

Next J

Next I

3. Квадраты на шахматной доске — массив элементов управления Shape (Фигура):

Dim I As Integer, J As Integer

For I = 0 To 7

For J = 1 To 8

If I Mod 2 <> J Mod 2 Then

shpКвадрат(I * 8 + J).BackColor =

&H0& 'черный

Else

shpКвадрат(I * 8 + J).BackColor = &HFFFFFF

'белый

End If

Next J

Next I

4. Набор членов арифметической прогрессии — массив переменных целого типа:

Static T(1 To 20) As Integer

Dim I As Integer

T(1) = 5

For I = 2 To 20

T(I) = T(I - 1) + 6

Next I

Прежде всего обратите внимание на то, как в примерах были объявлены (описаны) массивы переменных:

Static Теннисист(1 To 6) As String

Static T(1 To 20) As Integer

Вы можете предположить, что, поскольку в объявлениях используется служебное слово “Static”, это фрагменты кода из процедур. Первое объявление делает доступными шесть переменных с одним и тем же именем Теннисист, но с различными индексами от 1 до 6: Теннисист(1), …, Теннисист(6).

Во втором случае описаны 20 переменных с одним и тем же именем T, но с различными индексами (от 1 до 20): T(1), T(2), …, T(20).

Возможно краткое объявление. Например, массив T можно объявить так: Static T(20). В этом случае T — массив переменных типа Variant с индексом от 0 до 20. Явное указание типа данных, а также верхних и нижних пределов индекса является хорошим стилем программирования, способствующим уменьшению возможных ошибок.

Заметьте, что операторы цикла — это очень удобное и часто используемое средство для обработки массивов.

Как указывалось, все элементы массива должны быть одного и того же типа. Исключение составляют массивы переменных с данными типа Variant, которые могут хранить данные любого типа. Ниже показаны три массива с данными разных типов:

1) массив целых данных:

2) массив символьных (строковых) данных:

3) массив данных типа Variant:

В массивах элементов управления присваивание значений элементам имеет особенности — оно должно быть сделано во время разработки интерфейса (и не может быть изменено в ходе выполнения программы).

Все массивы, рассмотренные выше, можно представить как таблицу, состоящую только из одной строки. Это так называемые “одномерные массивы”. Любая таблица, в которой несколько строчек, — аналог двумерного массива. Вот пример двумерного массива, моделирующего состояние с продажей билетов на места в зале, в котором имеется 30 рядов по 20 мест в каждом:

Static Место(1 To 30, 1 To 20) As Boolean

Оператор присваивания:

Место(18, 5) = False

'место 5 в 18-м ряду занято

В Visual Basic могут быть использованы массивы и большей размерности.

В заключение заметим, что “область видимости” массивов (одна процедура, все процедуры модуля или все модули проекта) определяется так же, как и для “простых” переменных (см. газету “В мир информатики” № 80 / “Информатика” № 21/2006).

Вопросы и задания для проверки знаний

1. Для следующего оператора присваивания определите имя массива, индекс и значение:

Цвет(4) = "Зеленый"

2. Для следующего оператора присваивания определите элемент управления, его имя, свойство, индекс, тип данных свойства и значение свойства:

imgЛицо(7).Visible = False

3. Напишите объявление для массива с именем Объем, который используется в одной процедуре и содержит 20 элементов, значения которых имеют тип Single.

4. Вернитесь в начало статьи к примеру 2, в котором описан массив с именами теннисистов и печатаются пары имен спортсменов. Сколько строк будет напечатано? Что будет напечатано в первой строке? В последней строке?

5. Сколько элементов в двумерном массиве, объявленном следующим образом:

Static Температура(1 To 12, 1 To 31) As Integer

6. Следующая табличка представляет значения, присвоенные пяти элементам массива с именем S, который содержит данные целого типа:

Каковы будут значения элементов массива после выполнения каждого оператора:

S(2) = 7

S(3) = S(1) + S(2)

S(4) = S(4) – 2

Каково будет значение переменной Сумма после выполнения следующего фрагмента кода:

Сумма = 0

For I = 1 To 5

Сумма = Сумма + S(I)

Next I

Напишите фрагмент программы, в которой вычисляется среднее арифметическое значение всех элементов массива и выводится результат сравнения значения каждого элемента со средним в виде:

15 больше среднего

9 больше среднего и т.д.

7. Пользуясь алгоритмом, изображенным в виде следующей N–S-диаграммы:

— напишите программу сортировки элементов массива, представленного в предыдущем пункте.

Перечислите элементы массива после каждого “прохода” оператора цикла с параметром J.

В результате такой сортировки элементы массива упорядочиваются по возрастанию. Как нужно изменить N–S-диаграмму и код, чтобы элементы массива были упорядочены по убыванию?

8. Если элементы массива с самого начала почти упорядочены, то некоторые из “проходов” оператора цикла с параметром J будут излишними. Замените этот оператор оператором цикла с условием, который бы завершался, как только весь массив становится упорядоченным.

Продолжение