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

Продолжая таким же образом, вплоть до предпоследнего элемента, сортируют весь массив.

Обратите внимание, что в схемах алгоритмов обмен значениями обозначается символом “↔”, а в примере обмен реализован через дополнительную переменную xx.

 

Pr47411( )

Sub Pr47411(x())

Sub Pr47411(ByRef x( ) As

Single)

 

 

 

Dim i, n,j As Integer

 

 

 

 

Dim xx As Single

 

 

 

n=Разм(x)

 

n = UBound(x)

n-1

 

 

 

 

 

For

i = 0 To

To n

 

 

 

 

 

For

j = i +1

 

 

i=0,n-1

 

 

 

If x(i)

>

x(j) Then

 

 

 

 

 

xx=x(i)

 

 

 

 

 

 

 

x(i)=x(j)

 

 

j=i+1,n

 

 

 

x(j)=xx

 

 

 

 

 

 

 

End If

 

 

 

Нет

 

Да

 

Next j

 

 

 

x(i)>x(j)

Next i

 

 

 

 

 

 

x(i)↔x(j)

End Sub

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конец

 

 

 

 

 

 

 

Рис. 4.7.4-11

 

 

 

 

 

 

 

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. Это означает, что они вызываются по имени и (в данном случае) в качестве аргумента требуют имя существующего массива. Например, чтобы

отсортировать массив, такой, как массив Расстояния( ), следует использоватьСтраницатакую202

Тема 4.7. Программа алгоритмовформирования и обработки одномерных массивов

запись:

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.1Label2.Text = 0).

Рис. 4.7.5-1

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

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

Важными свойствами, которые заставляют индикатор выполнения работать, являются

Тема 4.7. Программа алгоритмовформирования и обработки одномерных массивов Страница 203

свойства 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 индикато-

Тема 4.7. Программа алгоритмовформирования и обработки одномерных массивов Страница 204

ра необходимо использовать функцию 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. Программа алгоритмовформирования и обработки одномерных массивов Страница 205

Соседние файлы в папке УчеП-Раз-4-Инф-270100