В мир информатики # 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 будут излишними.
Замените этот оператор оператором цикла с
условием, который бы завершался, как только весь
массив становится упорядоченным.
Продолжение |