Проект «Сортировка числового массива»




Билет № 4:Событийные процедуры, общие процедуры.

При разработке сложного алгоритма целесообразно ста­раться выделить в нем последовательности действий, кото­рые выполняют решение каких-либо подзадач и могут мно­гократно вызываться из основного алгоритма. Такие алгоритмы называются вспомогательными и в процедур­ных языках программирования реализуются в форме под­программ, которые вызываются из основной программы.

В объектно-ориентированных языках программирования вспомогательные алгоритмы реализуются с помощью общих процедур. Общие процедуры создаются в тех случаях, когда в программном модуле можно выделить многократно повто­ряющиеся последовательности действий (алгоритмы).

Определение общей процедуры. Каждой общей процедуре дается уникальное название — имя процедуры и устанавли­вается список входных и выходных параметров процедуры.

Список входных параметров представляет собой набор пе­ременных, значение которых должно быть установлено до начала выполнения процедуры.

Список выходных параметров представляет собой набор переменных, значение которых должно быть установлено после окончания выполнения процедуры.

Синтаксис общей процедуры:

Sub Имя Процедуры (Список Параметров)

программный код

End Sub

Вызов общей процедуры. Запуск общих процедур не свя­зывается с какими-либо событиями, а реализуется путем вызова из других процедур.

Общая процедура представляет собой подпрограмму, которая начинает выполняться после ее вызова из другой процедуры. Общая процедура вызывается на выполнение либо с помощью оператора Call, либо по имени. В случае вызова процедуры с использованием оператора Call список пара­метров заключается в скобки:

Call Имя процедуры(Список параметров)

В случае вызова процедуры по имени список параметров приводится без скобок:

Имя процедуры(Список параметров)

Размещение общей процедуры в проекте. Общая проце­дура может входить в состав программного модуля одной из форм проекта (в файл с расширением frm). Общая процедура может быть также размещена в стандартном программном модуле (файле с расширением bas).

Область видимости процедуры. Общие и событийные про­цедуры могут быть локальными и глобальными. Локальная процедура доступна только внутри данного программного модуля и не может быть вызвана из другого модуля. Напри­мер, локальная общая процедура, размещенная в програм­мном модуле некоторой формы, не может быть вызвана из программного модуля другой формы. Локальная процедура задается с помощью ключевого слова Private:

Private Sub Имя Процедуры

программный код

End Sub

Глобальные процедуры доступны, то есть могут быть вы­званы, из всех программных модулей проекта. Глобальная процедура задается с помощью ключевого слова Public (по умолчанию, если перед ключевым словом Sub отсутствуют ключевые слова, процедура является глобальной):

Public Sub Имя Процедуры

программный код

End Sub

Область видимости переменной. Переменные также могут быть локальными и глобальными (открытыми). Локальная переменная доступна только внутри процедуры или програм­много модуля и к ней невозможно обращение из другой про­цедуры или модуля. Локальная переменная определяется с помощью ключевого слова Dim.

Если переменная определена перед процедурой//////, то она может быть вызвана только в этой процедуре; если она определена перед программным модулем в области (Gene-ral)(Declaration) программного кода, то она может быть вы­звана только в этом модуле.

К глобальным переменным может быть произведено обра­щение из всех программных модулей проекта. Глобальная переменная определяется с помощью ключевого слова Glo­bal в области (General)(Declaration) программного кода.

Проект «Сортировка числового массива». Разработаем проект, который позволит заполнять числовой массив целыми случайными числами, а затем предоставит возможность сорти­ровать массив различными способами.

Заполнение массива случайными числами. Для генерации последовательности целых случайных чисел используем функ­цию генерации псевдослучайных (то есть каждый раз повторя­ющихся) последовательностей чисел Rnd и функцию выделения целой части числа Int.

Заполнение массива bytA, состоящего из 10 элементов, реа­лизуем с помощью цикла со счетчиком. В целях визуального контроля предусмотрим вывод массива в текстовое поле txtDim с использованием функции Str (преобразования числа в строковую форму).

Проект «Сортировка числового массива»

1) Создать новый проект. Разместить на форме текстовое поле txtDim и кнопку cmdDim. Присвоить свойству Caption зна­чение Заполнить.

2) Установить для свойства MultiLine текстового поля значе­ние True и подобрать размер шрифта так, чтобы массив рас­печатывался в одной строке текстового поля.

3) Ввести для кнопки событийную процедуру заполнения массива и его вывода в текстовое поле:

 

 

Dim bytl, bytA(l То 10) As Byte

Private Sub cmdDim_Click ()

Randomize

For bytl = 1 To 10

bytA(bytl) = Int(Rnd * 10)

txtDim.Text = txtDim.Text + Str(bytA(bytl))

Next bytl

End Sub

4) Запустить проект и несколько раз щелкнуть по кнопке Запол­нить.

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

Поиск минимального элемента. Будем считать сначала, что минимальный элемент равен первому элементу массива bytA (1) и присвоим переменной bytMin его значение.

Затем в цикле сравним последовательно элементы массива со значением переменной bytMin, если какой-либо элемент ока­жется меньше, присвоим его значение переменной bytMin, а его индекс присвоим переменной bytN. Распечатаем результаты.

5) Разместить на форме кнопку cmdMin и присвоить свойству Caption значение Мин. элемент. Создать для нее событий­ную процедуру поиска минимального элемента:

Private Sub cmdMin_Click()

bytMin = bytA(l)

bytN = 1

For bytl = 2 To 10

If bytA(bytl) < bytMin Then bytMin = bytA(bytl): bytN = bytl

Next bytl

Print "Минимальный элемент "; bytMin; "его индекс"; bytN

End Sub

6) Запустить проект. Последова­тельно щелкать на кнопках За­полнить и Мин. элемент.

В текстовом окне будет появля­ться заполненный массив, а на форме будет печататься минимальный элемент и его индекс.

Сортировка массива по возрастанию методом перестановок

Идея алгоритма сортировки по возрастанию массива, состояще­го из N элементов, методом перестановок элементов состоит в последовательном поиске минимальных элементов и их пере­мещении к началу массива с помощью перестановок с элементами, имеющими меньший индекс.

На первом шаге находим минимальный элемент массива и меняем его местами с первым элементом массива. Остаются не­упорядоченными N— 1 элемент. Проводим поиск минимального элемента среди элементов с индексами от 2 до N и делаем пере­становку.

Повторяем процедуру поиска минимального элемента среди оставшихся неупорядоченных элементов многократно. Повто­рение реализуем с помощью цикла со счетчиком, максималь­ное значение которого составляет N—1. В результате массив сортируется по возрастанию.

Так как поиск минимального элемента массива проводится многократно, реализуем рассмотренную ранее событийную про­цедуру cmdMin_Click () как общую процедуру МинЭлемент (bytl, bytN As Byte), где bytl — является входным парамет­ром, a bytN — выходным параметром.

7) Ввести программный код общей процедуры поиска минима­льного элемента и поместить ее в начало программного кода проекта. Объявить переменные, используемые во всех проце­дурах:

Dim bytA(l To 10), bytMin, bytl, bytj, bytK,

bytR, bytN As Byte,

'общая процедура поиска минимального элемента

Sub МинЭлемент (bytl, bytN As Byte)

bytMin = bytA(bytl)

bytN = bytl

For bytJ = bytl + 1 To 10

If bytA(bytJ) < bytMin

Then bytMin = bytA (bytJ): bytN = bytJ

Next bytJ

End Sub

Событийная процедура, реализующая сортировку массива, будет включать в себя вызов общей процедуры поиска минима­льного элемента и код перестановки элементов.

Процесс сортировки массива можно сделать наглядным, если в текстовое поле выводить состояние массива на каждом шаге сортировки.

8) Поместить на форму текстовое поле txtSort и кнопку cmdSort. Присвоить свойству кнопки Caption значение Сортировать.

9) Ввести программный код событийной процедуры сортировки массива:

'событийная процедура сортировки

Private Sub cmdSort_Click() txtSort.Text = ""

For bytl = 1 To 9

'вызов общей процедуры поиска минимального элемента

Call МинЭлемент(bytl, bytN)

'перестановка

bytR = bytA(bytl)

bytA(bytl) =bytA(bytN)

bytA(bytN) = bytR

'печать массива для каждого цикла сортировки

For bytK = 1 То 10

txtSort.Text = txtSort.Text + Str(bytA(bytK)) Next bytK

Next bytI

End Sub

10) Для большей наглядности разместить на форме две метки с номерами элементов массива (горизонтальная) и значениями счетчика цикла сортировки (вертикальная).

11) Запустить проект на выполнение. Щелкнуть по кнопкам Заполнить массив,

Мин. элемент и Сортировка.

12) Процедуру можно про­изводить многократно и наблюдать процесс сор­тировки для различных вариантов заполнения массива.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: