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

12.6. Использование графики для решения отдельных задач.

12.6.1. Визуализация процесса сортировки элементов массива.

В качестве примера использования графических методов в процессе освоения среды Visual Basic приведем простой пример их использования для визуализации процесса упорядочения массива по значениям его элементов. Необходимость этого связана с тем, что зачастую студенты не могут сопоставить код алгоритма сортировки ее физической реализации. Приходится вручную изображать последовательные состояния массива для пояснения процесса упорядочения его элементов. Откроем новый проект и резместим на форме групповой элемент – массив текстовых окон. В окне кодов формы запишем следующие объявления переменных и коды процедур:

Private x0%, y0%, x%, ind%(0 To 9), i%, j%

Private Sub Form_Load()

Me.AutoRedraw = True

Me.Caption = " ДЕМОНСТРАЦИЯ ПРОЦЕССА СОРТИРОВКИ."

x0 = 300: y0 = 2000

Randomize

For i = 0 To 9

ind(i) = i

txt(i).Top = y0

txt(i).Width = 800

txt(i).Left = x0 + 800 * i

txt(i) = Int(Rnd * 50)

Next i

End Sub

Private Sub Command1_Click()

Dim n%, ks%, taim!, tmp!

tmp = InputBox(" Введите темп сортировки (от 0.01 до 0.5 сек.)", , 0.02)

ks = InputBox("Введите ключ сортировки:" & vbCrLf & _

Space(30) & "1 - по возрастанию;" & vbCrLf & _

Space(29) & "-1 - по убыванию", , 1)

Me.Caption = " ВНИМАНИЕ: ИДЕТ ПРОЦЕСС СОРТИРОВКИ ПО "

If ks = 1 Then

Me.Caption = Me.Caption & "ВОЗРАСТАНИЮ."

Else

Me.Caption = Me.Caption & "УБЫВАНИЮ."

End If

' Р Е Ш Е Н И Е

For i = 0 To 8

' Запоминаем координату левой границы первого текстового окна

x = txt(ind(i)).Left

For j = i + 1 To 9

If Val(txt(ind(i))) * ks > Val(txt(ind(j))) * ks Then

' Первый этап процесса: ПОДЬЕМ ДВУХ ТРЕБУЮЩИХСЯ

‘ ОКОН

Do While txt(ind(j)).Top > 200

' Запоминаем текущее значение системного времени

taim = Timer

' Поднимаем текстовые окна со сравниваемыми значениями

' элементов массива в соответствии с алгоритмом сортировки

txt(ind(j)).Top = txt(ind(j)).Top - 200

txt(ind(i)).Top = txt(ind(i)).Top - 100

' Обновляем изображение формы

Me.Refresh

' Задерживаем процесс на задаваемое время (переменная tmp)

' для зрительного восприятия перемещений текстовых окон

Do While Timer < taim + tmp

DoEvents

Loop

Loop

' Второй этап процесса: ОБМЕН ПОЗИЦИЙ ОКОН ПО

‘ ГОРИЗОНТАЛИ

Do While txt(ind(j)).Left <> x

taim = Timer

txt(ind(j)).Left = txt(ind(j)).Left - 100

txt(ind(i)).Left = txt(ind(i)).Left + 100

Me.Refresh

Do While Timer < taim + tmp

DoEvents

Loop

Loop

' Третий этап процесса: ОПУСКАНИЕ ТЕКСТОВЫХ ОКОН

Do While txt(ind(j)).Top <> y0

taim = Timer

txt(ind(j)).Top = txt(ind(j)).Top + 200

txt(ind(i)).Top = txt(ind(i)).Top + 100

Me.Refresh

Do While Timer < taim + tmp

DoEvents

Loop

Loop

' В массиве индексов текстовых окон меняем местами элементы

' в соответствии с изменением положений окон

n = ind(i): ind(i) = ind(j): ind(j) = n

End If

Next j, i

Me.Caption = " МАССИВ УПОРЯДОЧЕН !"

End Sub

Private Sub Command2_Click()

End

End Sub

Спроектированная форма имеет вид:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]