МАССИВЫ
Обработка таких данных может заключаться в расчете среднего балла всех студентов или среднего значения температуры воздуха в каждом месяце. Эти переменные необходимы для кратковремен- ного хранения данных в оперативной памяти компьютера в тече- ние работы программы с целью их дальнейшей обработки и назы- ваются переменной с индексом или массивом (см. подразд. 7.2).
Рассмотрим примеры использования массивов в программи- ровании некоторых задач в среде проектирования Visual Basic.
Начнем с определения самого простого из массивов — одно- мерного массива (кроме одномерных существуют многомерные массивы, в частности, двумерные, или матрицы).
Одномерный массив — это конечное множество элементов од- ного типа.
В качестве элементов массива можно использовать любой ранее описанный тип, который называют в этом случае базовым типом.
Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует индекс, определяющий его положение в общей последовательности. Доступ к каждому от- дельному элементу осуществляется путем индексирования элемен- тов массива.
Индекс — любое выражение, значением которого является це- лое число.
Объявление массива аналогично объявлению переменной, толь- ко кроме имени переменной надо указать в скобках диапазон зна- чения индекса — минимальное и максимальное его значения,
между которыми записывается ключевое слово «То». Для двухмер- ного массива указываются два диапазона через запятую. Например: Dim А (1 То 30) as Single Dim В (1 То 10) as Integer Dim D (1 To 5, 2 To 10) as Byte
Часто минимальное значение индекса не указывается.
Тогда оно автоматически (по умолчанию) принимается равным нулю. Клю- чевое слово «То» при этом не используется. Но максимальное зна- чение индекса должно быть указано обязательно. Например:Dim С (30) as Byte
Для обращения к элементу массива необходимо указать имя массива и в скобках указать значение индекса. Например:
А( 15), В(9), D(4,5).
Рассмотрим на примере, как происходит обработка массивов в программе.
Пример 1. Пусть массив содержит значения среднесуточной тем- пературы воздуха в мае месяце 2004 г. Необходимо определить минимальную, максимальную и среднюю температуры воздуха в этом месяце.
Алгоритм нахождения максимальных и минимальных значений основан на выдвижении двух гипотез:
1) максимальным элементом массива является его первый эле- мент;
2) минимальным элементом массива является его первый эле- мент.
Эти гипотезы выражаются так: одно и тоже значение «Темпе- ратура(1)» присваивается двум переменным Мах и Min.
Поиск максимального элемента массива рассмотрен в примере
подразд. 7.2.
Алгоритм решения данной задачи приведен на рис. 8.12, а. Для определения среднего значения температуры за месяц в программе необходимо вычислить сумму температур и разделить ее на число значений.
Программа на этапе выполнения представлена на рис. 8.12, б. Событийная процедура, вызываемая при щелчке по кнопке Расчет, выглядит следующим образом:
Dim Max As Single, Min As Single, Aver As Single, Sum As Single, i As Single, Temp(l To 30) As Single Private Sub Command l_Click()
For i = 1 To 30 Temp(i) = 0 Next i
For i = 1 To 30
Temp(i) = Уа1(1пршВох("Ввод элемента:", "Ввод массива")) Next i
Max = Temp(l)
Min = Temp(l) s = 0
For i = 1 To 30
If Temp(i) > Max Then Max = Temp(i) If Temp(i) < Min Then Min = Temp(i) s = s + Temp(i)
Next i
Aver = s/30
Text 1.Text = Str(Aver)
Text2.Text = Str(Min)
Text3.Text = Str(Max)
End Sub
В примере 1, прежде чем выполнить процедуру обработки (на- хождение минимального элемента, максимального элемента или подсчет среднего арифметического значения), необходимо сна- чала выполнить инициализацию элементов массива (обнуление), затем ввести необходимые значения.
Для инициализации массива достаточно в цикле присвоить всем элементам нулевые значения:
For i - 1 То 30
Temp(i) = 0
Next i
Эта операция позволяет избежать ошибки в программе при обработке массивов.
Ввод значений элементов массива можно осуществлять разны- ми способами.
Первый способ состоит в том, что значения элементов масси- ва вводятся пользователем с клавиатуры. В этом случае можно ис- пользовать системную функцию ввода InputBox (см. рис. 8.12, б) или поле ввода.
Второй способ заполнения массива состоит в использовании оператора присваивания. Например, можно заполнить числовой массив целыми случайными числами, для генерации которых ис- пользуется функция Rnd. Функция Rnd дает равномерно распреде- ленную псевдослучайную (т. е. каждый раз повторяющуюся) пос- ледовательность чисел из интервала 0 < X < 1. Для того чтобы генерировать различающиеся между собой последовательности, можно использовать оператор Randomize. Получение целочислен- ной последовательности случайных чисел из интервала 0 < Х< 100 достигается использованием функции выделения целой части числа:
Int(Rnd*100)
Событийная процедура для заполнения одномерного целочис- ленного массива случайными числами будет выглядеть следующим образом:
Dim A(l to 100) As Byte, i As Byte
Private Sub Command l_Click()
For i=l to 100
A(i)=Int(Rnd* 100)
Next i
End Sub
В большинстве случаев для работы с массивом используется цикл с параметром. Но не всегда он бывает удобен. Рассмотрим такой случай, когда обработка массива выполняется циклом с условием.
Пример 2. Подсчитать сумму элементов массива до первого нулевого элемента.
Dim A (1 To 20) As integer, s As Integer, i As byte Private Sub Command l_Click()
'инициализация массива For i = 1 To 20 A(i) = 0 Next i
'заполнение массива For i = 1 To 20
A(i) = Val( IN PUTBOX(" Введите элемент массива'* + Str(i))) Next i S = 0
'обработка массива Do
s = s + A(i)
Loop While x 0 Forml. Print End Sub
Рассмотрим еще один пример, демонстрирующий обработку двухмерного массива.
Пример 3. Задан двухмерный массив из четырех строк и шести столбцов, подсчитать суммы элементов по строкам и столбцам.