ТОП 10:

Формирование массива с помощью функции Split



Число элементов массива и сам массив можно задать в текстовых окнах. В качестве разделителя значений элементов массива можно использовать любой символ, например, пробел. В VB имеется функция Split, которая позволяет, указав разделитель, ввести из текстового поля все элементы массива сразу. Эта функция разделит строку по указанному разделителю на массив подстрок. Подстрок будет столько, сколько было введено элементов. Массив полученных подстрок индексируется с нуля!

В приведенном ниже примере поиска максимального значения в массиве для ввода данных используются два элемента управления TextBox. Первый – для указания количества элементов массива. Второй – для ввода строки, состоящей из элементов массива разделенных пробелом. Функция Split делит строку Text2 по пробелу на массив подстрок. После этого в цикле заполняются элементы массива. Результаты расчета выводятся на графическое окно
PictureBox.

Option Base 1 Dima(30) As Single Dim av As String Private Sub Command1_Click() n = Val(Text1.Text) 'Ввод количества элементов массива av = Split(Text2.Text, " ") 'Ввод строки, состоящей из n значений 'элементов массива в переменную av For i = 1 To n a(i) = Val(av(i - 1)) 'Заполнение массива Next i Max = a(1): k = 1 For i = 1 To n If a(i) > Max Then Max = a(i) k = i End If Next i Picture1.Print "Максимальный элемент "; Max Picture1.Print "Его номер "; k End Sub

Линейная сортировка массива

Существует множество алгоритмов для сортировки массивов. Рассмотрим два алгоритма: сортировка выбором и метод пузырька.

Cортировка выбором. Суть метода может быть описана так:

1. В последовательности из n элементов выбирается наименьший (наибольший) элемент;

2. Меняется местом с первым;

3. Далее процесс повторяется с оставшимися n-1 элементами, затем с оставшимися n-2 элементами и т.д., до тех пор, пока не останется один самый большой (маленький) элемент.

Для реализации этого алгоритма необходимо использовать два вложенных цикла с параметром For. Внешний цикл (по i) предназначен для последовательного фиксирования элементов массива, внутренний (по j) – осуществляет поиск минимального (максимального) и его позиции в неотсортированной части массива. После выхода из внутреннего цикла следует перестановка элементов. Последний элемент во внешнем цикле не рассматривается: он сам встанет на свое место.

Фрагмент программного кода процедуры сортировки выбором: (нумерация элементов массива начинается с единицы):

For i = 1 To n - 1 'Внешний цикл: перебор элементов массива

Min = a(i): nom = i 'Сортировка по убыванию

For j = i + 1 To n 'Внешний цикл: поиск минимального элемента и

'его позиции в неотсортированной части массива

If (a(j) < Min) Then Min = a(j): nom = j

Next j

tmp = a(i) 'Перестановка элементов ai и anom

a(i) = a(nom)

a(nom) = tmp

Next i

For i = 1 To n

Text3.Text = Text3.Text + " " + Str(a(i))

Next i

Сортировка методом пузырька.Метод основан на сравнении соседних элементов. «Неправильно» расположенные по отношению друг к другу элементы меняются местами. Во вложенных циклах поочередно фиксируется пара соседних элементов массива. В результате первого прохода элемент с минимальным значением оказывается в первой позиции массива (всплывает) (Рис. 6).

Рис. 6 – Сортировка методом пузырька

Фрагмент программного кода сортировки методом пузырька:

Const n = 10 Dim a(1 To n) As Byte Private Sub Command1_Click() Randomize For i = 1 To n a(i) = Int(Rnd * 40) Picture1.Print a(i) Next i End Sub Private Sub Command2_Click() Dim r As Byte For i = 1 Ton-1 'Цикл по числу проходов For j = 1 To n – i 'Цикл для сравнения соседних 'элементов в оставшейся части массива If a(j) > a(j + 1) Then'Сравнение соседних элементов r = a(j) a(j) = a(j + 1) 'Перестановка элементов aj и aj+1 a(j + 1) = r End If Nextj Nexti For i = 1 To n Picture2.Print a(i) Next i End Sub

Уплотнение массива

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

Алгоритм удаления элемента из массива состоит в том, что на место удаленного i-го элемента переписывается i+1-ый элемент, на место i+1-го элемента переписывается i+2-ой элемент и т.д.

Пример.Удалить из сформированного массива числа, кратные трем.

Фрагмент программного кода уплотнения массива (нумерация элементов массива начинается с единицы):

i=1 'Инициализация счетчика

'Цикл последовательного перебора имеющихся элементов. Изначально их n штук

Do While i<=n 'Пока i остается <=N тело цикла выполняется

If (a(i) mod 3 <> 0) or (a(i)=0) Then ' Проверка условия

i=i+1 'Увеличение параметра цикла, если элемент не кратен 3

Else

For j=i To n-1 'Цикл для удаление из массива элемента кратного 3

a(j)=a(j+1) 'На место элемента aj переписывается элемент aj+1

Next j

n=n-1 'Уменьшение на единицу количества элементов массива

End if

Loop'Конец цикла While

Вставка элемента в массив

Вставка элемента в массив – задача обратная предыдущей. Прием используется тот же – смещение группы элементов на одну позицию. Только при уплотнении сдвиг производится влево, при вставке – вправо. При вставке возникает проблема, что делать с последними элементами? Если в дальнейшей работе с массивом участвуют только заявленные элементы, то «хвост» придется вытеснить, последние значения при этом будут утрачены. Иначе, придется создавать дополнительный массив, размерность которого будет больше исходного или объявить размер массива с учетом количества вставленных элементов. Выбор типа цикла для работы с массивом зависит от конкретного случая. Например, можно использовать цикл с параметром, если хвост подлежит вытеснению, и число элементов в массиве остается неизменным.

Пример 1. В заданный упорядоченный по возрастанию массив вставить число k, не нарушая его упорядоченности. Последний элемент вытеснить.

Фрагмент программного кода:

For i=1 To n 'Цикл для перебора элементов массива

If k < a(i) Then'Поиск места для вставки нового значения k

'Если место найдено, то организуется цикл для смещения элементов на единицу вправо

For j=N-1 Downto i+1

a(j)=a(j-1) ' На место элемента aj переписывается элемент aj-1

Nexti

a(i)=k 'Вставка нового значения на освобожденное место

Exit For 'Выход из внешнего цикла i

Endif

Nexti

Пример 2. В одномерный массив вставить число x после всех элементов, кратных трем. Все элементы массива сохранить.

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

Фрагмент программного кода:

kol=0; 'Счетчик количества вставок

For i=n To 1 'Цикл для перебора элементов массива c конца

If a(i) mod 3=0 Then'Поиск места для вставки нового значения k.

'Если место найдено, то организуется цикл для смещения элементов на единицу вправо

'с учетом вставленных элементов

For j=n+kol To i+1

a(j+1)=a(j) 'На место j+1-го элемента переписывается j-ый элемент

Nextj

a(i+1)=x 'Вставка нового значения на освобожденное место

kol=kol+1 'Счетчик количества вставок увеличивается на 1

End if

Nexti







Последнее изменение этой страницы: 2016-08-12; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.210.11.249 (0.009 с.)