Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
27
Добавлен:
27.04.2015
Размер:
650.22 Кб
Скачать

4.7.5. Обработка массивов с помощью методов класса Array

В п.п. 4.7.4. было рассмотрено использование массивов для хра­нения и обработки информации в программах VB.Здесь рассмотрим использование методов класса Array из библиотеки MS .NET Framework, которые позволяют быстро сортировать, выполнять поиски, менять порядок элементов массива, а также выполнять другие задачи с использованием готовых процедур.

Для реализации массивов в Visual Basic определен и используется базовый класс Array. Этот класс Array предоставляет набор следующих свойств и методов:

ИмяМассива.Rank

ИмяМассива.Length

ИмяМассива.GetLength( )

ИмяМассива.GetLowerBound( )

ИмяМассива.GetUpperBound( )

ИмяМассива1.CopyTo(ИмяМассива2, СтартовыйИндекс)

Array.Sort( ),

Array.Find( ),

Array .Reverse( ),

Array.Copy( )

Array.Clear( )

Проведя эксперименты с классом Array в окне CodeEditor и используя технологию MS IntelliSense, можно найти и другие интересные методы. Методы класса Array работают, как и все другие методы .NET Framework. Это означает, что они вызываются по имени и (в данном случае) в качестве аргумента требуют имя существу­ющего массива. Например, чтобы отсортировать массив, та­кой, как массив Расстояния( ), следует использовать такую запись:

Array.Sort(Расстояния).

Когда Visual Basic выполняет метод Array.Sort( ), он создает в памяти временное хранилище для массива и ис­пользует процедуру сортировки для реорганизации. После завершения сортировки первоначальный массив переупорядочивается в порядке возрастания, когда наименьшее значение оказывается в элементе с индексом 0, а наибольшее – в после­днем элементе массива. В случае показанного выше примера сортировка массива Растояния( )даст массив расстояний, отсортированный от наиболее низких к наиболее высоким значениям.

Далее рассмотрим, как использовать методы Array.Sort( )и Array.Reverse( ) для быстрой реорганизации большого масси­ва, содержащего шестизначные числа, случайно выбранные из диапазо­на от 0 до 1000000. Также рассмотрим, как использовать элемент управления, который предоставляет визуальное отображение хода процесса длительной сортировки. Элемент управления ProgressBar рас­положен на вкладке CommonControls окна Элементы управления (Toolbox).

Пример 4.7.5-1.Создать проект, который использует методы класса Array для сортировки массива из 3000 элементов

  1. В элементе меню Файл (File) щелкните на команде Создать проект Пример-4-7-5-1.

  2. Создать интерфейс пользователя, как на рис. 4.7.5-1.

Эта форма содержит текстовое поле для отображения значений элементов массива, а также три кнопки и объект индикатора выполнения, который дает пользователю визуальное представление о ходе длительности операций с массивами. Такое представление полезно при вычислениях, которые требуют более не­скольких секунд, и, когда используется программный код для сортировки массива из 3000 элементов, некоторая пауза неизбежна. Справа от объекта индикатора выполнения ProgressBar имеется объект надписи Label2, для определения количества элементов в массиве (на рис. 4.7.5.1 Label2.Text = 0).

Рис. 4.7.5-1

  1. Далее необходимо щелкнуть на индикаторе выполнения (ProgressBar)формы.

Объект ProgressBar1 на форме выделится, и его имя появится в окне Свойства (Properties). Индикатор выполнения предназначен для отображения прогресса вычислений, показывая соответствующее число цветных прямоугольников, расположенных в виде горизонтальной полосы. Когда вычисления будут завершены, эта полоса будет полностью заполнена прямоугольниками.

Важными свойствами, которые заставляют индикатор выполнения работать, являются свойства Minimum (Mинимум), Maximum (Mаксимум) и Value (Значение), значения которых обычно задаются в коде программы. Чтобы увидеть, как задаются свойства Minimum и Maximum, необходимо посмотреть на процедуру события Form1_Load( )этого проекта.

4. Чтобы отобразить процедуру события Form1_Load( ),дважды щелкни­те мышью на

форме.

В окне отобразится соответствующий код (рис. 4.7.5-2).

Public Class Form1

Dim RandArray(0 To 499) As Long

'Инициализация ProgressBar и вывод количества элементов

Private Sub Form1_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

HandlesMyBase.Load

ProgressBar1.Minimum = 0

ProgressBar1.Maximum = UBound(RandArray)

Label2.Text = UBound(RandArray) + 1

End Sub

' Заполняем массив случайными числами и отображаем их в текстовом поле

Private Sub Button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

Handles Button1.Click

Dim i As Integer

For i = 0 To UBound(RandArray)

RandArray(i) = Int(Rnd() * 1000000)

TextBox1.Text = TextBox1.Text & CStr(RandArray(i)) & vbCrLf

ProgressBar1.Value = i ' перемещаем индикатор выполнения

Next i

End Sub

'Сортируем массив, используя метод Array.Sort, и отображаем его

Sub Button2_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

Handles Button2.Click

Dim i AsInteger

TextBox1.Text = ""

Array.Sort(RandArray)

For i = 0 To UBound(RandArray)

TextBox1.Text = TextBox1.Text & CStr(RandArray(i)) & vbCrLf

ProgressBar1.Value = i ' перемещаем индикатор выполнения

Next i

End Sub

' Изменяем порядок элементов массива с помощью Array.Reverse

Sub Button3_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button3.Click

Dim i AsInteger

TextBox1.Text = ""

Array.Reverse(RandArray)

For i = 0 To UBound(RandArray)

TextBox1.Text = TextBox1.Text &CStr(RandArray(i)) & vbCrLf

ProgressBar1.Value = i 'перемещаем индикатор выполнения

Next i

End Sub

End Class

Рис. 4.7.5-2

Чтобы индикатор выполнения показывал правильное значение хода выполнения задачи, требуется установить относительные значения для начала и конца индикатора. Это делается с помощью свойств Minimum и Maximum, которые соответствуют первому и последнему элементам массива, с которым производится работа. Первый элемент массива всегда имеет индекс 0, но значение последнего индекса элемента зависит от размера массива. Так что для получения этого значения и установки свойства Maximum индикато­ра необходимо использовать функцию UBound( ). Массив, с которым работаем в этом примере, называется RandArray и является массивом целых чисел типа Long и содержит 500 элементов (от 0 до 499).

5. Чтобы запустить программу, щелкните на кнопке Начать отладку (Start Debugging). Программа запустится, и на экране появится форма Пример 4.7.5-1. Объект индикатора выполнения калибруется так, чтобы отслеживать вычис­ление 500 единиц (размер массива), и справа от индикатора появля­ется число 500 (работа объекта надписи Label2 и функции UBound( )).

6. Далее можно щелкнуть на кнопке Заполнить массив.

Программа сформирует массив RandArray 500 случайными числами (по­лученными с помощью функции Rnd( )), и отобразит их в текстовом поле. По мере обработки массива и заполнения объекта текстового поля данными индикатор выполнения начнет заполняться зелеными пря­моугольниками. Когда этот процесс завершится, экран будет выгля­деть примерно так, как на рис. 4.7.5-3

Рис. 4.7.5-3

Код, который привел к такому результату, находится в процедуре собы­тия Button1_Click( ).

Чтобы получить целые случайные числа, необходимо использовать вместе функции Int( )и Rnd( )и умножить случайное число, генерируемое Rnd( ),на 1000000, чтобы по­лучить шестизначные целые числа. Запись этих чисел в массив вы­полняется с помощью цикла For...Next и индекса массива, равного счетчику этого цикла (i). Заполнение массива - это очень быстрая опе­рация. Замедление свя­зано с необходимостью поочередно присваивать элементы массива объекту текстового поля. Этот процесс требует 500 обновлений ком­поненты интерфейса пользователя и занимает несколько секунд. Од­нако это полезно – задержка дала возможность показать элемент управления ProgressBar. Так как объект индикатора выполнения откалиброван на использование максимального числа элементов мас­сива, присвоение счетчика цикла (i) свойству Value индикатора по­зволяет точно отобразить, какой объем вычислений уже завершен.

7.Щелкните на кнопке Отсортировать массив.

Программа запустит процесс сортировки массива RandArray, для реорганизации массива в восходящем порядке будет использоваться метод Array.Sort и 500 элементов бу­дут перечислены от наименьшего к наибольшему.

Экран при этом должен выглядеть примерно так, как на рис. 4.7.5-5.

Рис. 4.7.5-5

Код, который привел к такому результату, находится в процедуре со­бытия Button2_Click( ).

Эта процедура события при щелчке на кнопке Отсортировать массив очищает объект текстового поля, а затем сортирует массив с помощью метода Array.Sort. Процесс сортировки очень быстр. И снова единственным замедлением является перестройка объекта текстово­го поля по одной строке в цикле For...Next - процесс, который отобра­жается в объекте ProgressBar1 и его свойстве Value.

8. Далее можно щелкнуть на кнопке Переупорядочить массив.

Программа использует метод Array.Reverse() для обработки RandArray, переупорядочивая его в обратном порядке. Это значит, что первый элемент становится последним, а последний - первым.

Код, который привел к такому результату, находится в процедуре со­бытия Button3_Click( ).

Эта процедура события идентична процедуре события Button2_Click( ), за одним исключением:

Array.Sort(RandArray)превратилась в Array.Reverse(RandArray)

  1. Для завершения программы необходимо щелкнуть на кнопке Конец отладки (StopDebugging).

  2. В окне Редактора кода (Edit Code) необходимо найти оператор программы,

который объявляет массив RandArray:

Dim RandArray(0 To 499) As Long

  1. Заменить499 в объявлении массива на 2999. Теперь оператор должен выглядеть следующим образом:

Dim RandArray(0 To 2999) As Long

  1. Снова запустить программу, чтобы посмотреть, как объявление и за­полнение

массива из 3000 элементов влияет на производительность программы.

Так как обработка 3000 элементов требует гораздо больше работы, Visual Basic требует некоторого времени на заполнение объекта тек­стового поля при заполнении, сортировке и переупорядочивании массива RandArray. Однако индикатор выполнения информирует вас о ходе сортировки.

Соседние файлы в папке Учебное_пособие-Раздел4-Информатика-270100з