Главная страница

Введение 8 Этапы создания Windowsприложения 8


Скачать 6.98 Mb.
НазваниеВведение 8 Этапы создания Windowsприложения 8
АнкорVisual Basic 2005 (word97).doc
Дата22.12.2017
Размер6.98 Mb.
Формат файлаdoc
Имя файлаVisual Basic 2005 (word97).doc
ТипРеферат
#12532
страница29 из 63
1   ...   25   26   27   28   29   30   31   32   ...   63

7.12. Перестановка местами двух элементов массива


Задача перестановки местами двух элементов массива решается тем же способом, что и задача обмена значений двух переменных, рассмотренная в разделе 4.4. Для перестановки местами двух элементов массива нам необходимо знать номера этих элементов. Перед перестановкой необходимо проверить, существуют ли в массиве элементы с такими номерами, не выходят ли эти номера за границы массива. Если перестановка возможна, то для ее проведения нам потребуется дополнительная переменная, в которой временно будет храниться значение одного из переставляемых элементов. Очевидно, что массив надо будет выводить дважды: до и после перестановки элементов, чтобы пользователь мог проконтролировать правильность работы программы.

Рассмотрим особенности реализации этого алгоритма. Номера переставляемых элементов будем вводить с клавиатуры, используя функцию InputBox.

Начинаем с объявления переменных. Номера переставляемых элементов будем хранить в переменных k и p, которые будут иметь целочисленный тип данных.

Dim k, p As Integer

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

Dim z As Integer

Вводим номер первого переставляемого элемента. При вводе нам необходимо организовать проверку, чтобы пользователь не мог ввести номер, находящиеся за пределами массива. Для этого достаточно потребовать, чтобы вводимое значение находилось в диапазоне от 0 до n включительно, где n – номер последнего элемента массива.

Do

k = Val(InputBox("Введите номер элемента <=" + _

Str(n)))

Loop Until k >= 0 And k <= n

Аналогичным образом вводим номер второго переставляемого элемента.

Do

p = Val(InputBox("Введите номер элемента <=" + _

Str(n)))

Loop Until p >= 0 And p <= n

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

z = a(k)

На место этого элемента записываем значение второго переставляемого элемента массива.

a(k) = a(p)

А на место второго элемента записываем старое значение первого элемента, сохраненное в дополнительной переменной.

a(p) = z

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

lstA.Items.Add("-------------------------------")

Печатаем поясняющий заголовок.

lstA.Items.Add("Измененный массив")

Затем последовательно в цикле печатаем все элементы измененного массива. Использование константы vbTab позволяет организовать вывод в две колонки.

For i = 0 To n

lstA.Items.Add(Str(i) + vbTab + Str(a(i)))

Next

Полный текст программы представлен в приложении 31. Пример работы программы приведен на рис. 46.


Рис. 46. Пример работы программы, переставляющей местами два элемента массива

7.13. Формирование нового массива из некоторых элементов исходного массива


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

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

Dim b() As Integer

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

Dim k As Integer

До начала формирования нового массива в нем не содержится ни одного элемента. Поэтому номер последнего элемента будет находиться за границами массива. Как правило, его задают равным -1.

k = -1

Организуем цикл для проверки всех элементов исходного массива.

For i = 0 To n

Анализируем очередной элемент исходного массива

If a(i) Mod 2 = 0 Then

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

k += 1

Изменяем размер нового массива с помощью оператора ReDim. Чтобы при изменении размера массива не потерялись ранее найденные элементы, необходимо использовать ключевое слово Preserve.

ReDim Preserve b(k)

В новый массив на место последнего элемента записываем анализируемый элемент исходного массива.

b(k) = a(i)

End If

Next

После завершения основного цикла в массиве b() находятся все четные элементы исходного массива. Остается распечатать все элементы нового массива в окне списка. Выводим горизонтальную черту, чтобы зрительно отделить исходные данные от результатов.

lstA.Items.Add("-------------------------------")

Анализируем номер последнего элемента в новом массиве.

If k = -1 Then

Если он остался равным -1, значит, в исходном массиве не было ни одного элемента, удовлетворяющего поставленному условию. Следовательно, в новом массиве нет ни одного элемента. Поэтому вместо элементов массива выведем поясняющее сообщение.

lstA.Items.Add("Новый массив пуст")

Else

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

lstA.Items.Add("Новый массив")

Затем последовательно в цикле печатаем все элементы сформированного массива. Обратите внимание, что при выводе массива b() используется переменная k (а не n), то есть номер последнего элемента в новом массиве. Константа vbTab позволяет организовать вывод в две колонки.

For i = 0 To k

lstA.Items.Add(Str(i) + vbTab + Str(b(i)))

Next

End If

Полный текст программы представлен в приложении 32. Примеры работы программы при различных исходных данных приведены на рис. 47.


Рис. 47. Примеры работы программы формирования нового массива из четных элементов исходного массива

1   ...   25   26   27   28   29   30   31   32   ...   63


написать администратору сайта