- •Тема: «Разработка приложений с использованием одномерных массивов»
- •1. Массивы
- •1.1. Общие принципы организации массивов
- •1.2. Обращение к элементу массива имя_массива(Индекс)
- •1.3. Статический массив
- •1.4. Динамический массив
- •1.5. Типовые приемы работы с одномерными массивами
- •1. Заполнение массива данными
- •2. Преобразование массива (действия с элементами массива)
- •3. Вывод массива или отдельных его элементов
- •1.6. Массивы однотипных элементов
- •2. Типовые задачи на обработку одномерных массивов
- •2.1. Поиск максимального (минимального) значения в массиве
- •2.2. Подсчет суммы значений элементов массива и среднего значения для элементов массива
- •2.3. Перестановка элементов массива в обратном порядке
- •2.4. Циклический сдвиг элементов массива
- •2.5. «Сжатие» массива
- •2.6. Сортировка элементов массива
- •3. Упражнения
- •4. Задания для самостоятельного выполнения
- •1. Выполните следующие задания на заполнение массива
- •4. Выполните следующие задания на обработку элементов одномерного массива. Дополнительный массив не использовать.
- •5. Выполните следующие задания на обработку элементов одномерного массива. Дополнительный массив не использовать.
2.6. Сортировка элементов массива
Под сортировкой понимают процесс перестановки объектов данного массива в определенном порядке. Целью сортировки является упорядочение массивов для облегчения последующего поиска элементов в данном массиве. Существует много методов сортировки массивов. Рассмотрим метод простого выбора.
Этот метод основывается на алгоритме поиска минимального элемента. В массиве А(1..n) отыскивается минимальный элемент, который ставится на первое место. Для того чтобы не потерять элемент, стоявший на первом месте, этот элемент устанавливается на место минимального. Затем в усеченной последовательности, исключая первый элемент, отыскивается минимальный элемент и ставится на второе место, и так далее n-1 раз, пока не встанет на свое место предпоследний n-1 элемент массива А, сдвинув максимальный элемент в самый конец.
Рассмотрим алгоритмическое решение задачи на примере сортировки некоторого массива значений по возрастанию. В соответствии с вышеописанным методом нам необходимо несколько раз выполнять операции поиска минимального элемента и его перестановку с другим элементом, то есть потребуется несколько раз просматривать элементы массива с этой целью. Количество просмотров элементов массива равно n-1, где n – количество элементов массива.
Рассмотрим выполнение сортировки данным методом на конкретном примере. Пусть исходный массив содержит 5 элементов (2, 8, 1, 3, 7). Количество просмотров согласно модифицированному методу простого выбора будет равно 4. Покажем в таблице 1, как будет изменяться исходный массив на каждом просмотре. Обозначим через k – счетчик (номер) просмотров элементов массива. Отметим, что для перестановки элементов местами необходимо знать их порядковые номера.
Таблица 1. Пример сортировки
Номер просмотра массива k |
Исходный массив |
Переставляемый элемент |
Минимальный элемент |
Массив после перестановки |
||
Номер |
Значение |
Номер |
Значение |
|||
1 |
(2,8,1,3,7) |
1 |
2 |
3 |
1 |
(1,8,2,3,7) |
2 |
1,(8,2,3,7) |
2 |
8 |
3 |
2 |
1,(2,8,3,7) |
3 |
1,2,(8,3,7) |
3 |
8 |
4 |
3 |
1,2,(3,8,7) |
4 |
1,2,3,(8,7) |
4 |
8 |
5 |
7 |
1,2,3,7,8 |
Программную реализацию сортировки массива смотрите в упражнении 2.
3. Упражнения
Упражнение 1
Создадим приложение, которое предлагает пользователю задать размер линейного массива, заполняет этот массив случайными целыми числами в диапазоне от –10 до 10, выводит список элементов массива, затем по выбору пользователя определяет: сумму всех элементов массива, количество положительных элементов массива, наименьший элемент массива и среднее арифметическое элементов массива кратных пяти.
Реализация проекта
1. Создайте новый проект.
2. Разработайте интерфейс, аналогичный изображенному на рис. 9.1.
3. Обратите внимание, что все подзадачи решаются за один просмотр элементов массива.
Например, поиск минимального элемента в массиве. Вначале устанавливается текущий минимум по первому элементу массива Min=A(1). Затем начинается просмотр элементов массива: выбирается очередной элемент A(i) и сравнивается с Min. Если элемент A(i) меньше текущего Min, то выполняется переприсваивание Min=A(i).
4. Программный код приложения:
Option Explicit
Option Base 1
Dim n As Integer
Dim A() As Integer ' Описание динамического массива целых чисел
Private Sub Command1_Click()
Dim i As Integer
n = Val(Text1.Text) ' Число элементов массива
ReDim A(n) ' Задать массиву А длину n
Text2.Text = "" ' Очистить текстовое поле Text2
Randomize
For i = 1 To n
A(i) = -10 + Int(Rnd * 21) ' Присвоить элементу массива случайное
' целое число из отрезка [-10, 10]
Text2.Text = Text2.Text + " " + Str(A(i)) ' Вывести элементы массива
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, Sum As Integer, Min As Integer
Dim CountP As Integer, Sum1 As Integer, Kol As Integer
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Sum = 0
CountP = 0
Sum1 = 0
Kol = 0
If Check3.Value = 1 Then Min = A(1) ' Пусть минимальным элементом будет
' первый элемент массива
For i = 1 To n
If Check1.Value = 1 Then ' Определить сумму всех элементов
Sum = Sum + A(i)
End If
If Check2.Value = 1 Then 'Определить количество положительных чисел
If A(i) > 0 Then CountP = CountP + 1
End If
If Check3.Value = 1 Then ' Определить минимальный элемент массива
If A(i) < Min Then Min = A(i)
End If
If Check4.Value = 1 Then ' Определить сумму и количество элементов
If A(i) Mod 5 = 0 Then ' массива кратных пяти
Sum1 = Sum1 + A(i)
Kol = Kol + 1
End if
End If
Next i
' Вывести результаты обработки массива
If Check1.Value = 1 Then Text3.Text = Str(Sum)
If Check2.Value = 1 Then Text4.Text = Str(CountP)
If Check3.Value = 1 Then Text5.Text = Str(Min)
If Check4.Value = 1 Then Text6.Text = Str(Sum1 / Kol)
End Sub
5. Сохраните и протестируйте проект (рис. 9.1).
Рис. 9.1
Упражнение 2
Создадим приложение, которое предлагает пользователю отсортировать массив по возрастанию или убыванию.
Реализация проекта
1. Создайте новый проект.
2. Разработайте интерфейс, аналогичный изображенному на рис. 9.2.
3. Программный код приложения:
Option Explicit
Option Base 1
Dim n As Integer
Dim A() As Integer
Private Sub Command1_Click()
Dim i As Integer
n = Val(Text1.Text)
ReDim A(n)
Text2.Text = ""
Randomize
For i = 1 To n
A(i) = Int(Rnd * 10) ' Присвоить элементу массива случайное
' целое число из отрезка [0, 9]
Text2.Text = Text2.Text + " " + Str(A(i)) ' Вывести элементы массива
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, k As Integer, m As Integer, n_m As Integer
For k = 1 To n – 1
m = A(k): n_m = k
For i = k + 1 To n
If Option1.Value And A(i) < m Then 'Сортировка по возрастанию
m = A(i)
n_m = i
End If
If Option2.Value And A(i) > m Then 'Сортировка по убыванию
m = A(i)
n_m = i
End If
Next i
' Перестановка элементов
If n_m <> k Then
A(n_m) = A(k)
A(k) = m
End If
Next k
' Вывести элементы отсортированного массива
Text3.Text = ""
For i = 1 To n
Text3.Text = Text3.Text + " " + Str(A(i))
Next i
End Sub
5. Сохраните и протестируйте проект (рис. 10.2).
Рис. 9.2
