ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.03.2025
Просмотров: 1062
Скачиваний: 2
mA = Sum / 20
MsgBox String1 & Sum & Chr(13) & String2 & mA, , Title
End Sub
Первый цикл For…Next используется для заполнения массива А случайными числами в диапазоне от 0 до 100. Вычисление суммы Sum элементов массива А происходит во втором цикле For…Next. Переменная этого цикла одновременно является индексом массива. На каждом шаге цикла к сумме элементов массива добавляется очередной элемент. По окончании цикла переменная Sum будет содержать полную сумму всех элементов массива A(i).
Пример 5. Вычислить сумму всех четных элементов одномерного массива, состоящего из 15-ти элементов.
Sub InputArray5()
'**********************************************************
'Вычислить сумму всех четных элементов одномерного массива, 'состоящего из 15-ти элементов. Заполнение одномерного 'массива происходит при помощи датчика случайных чисел.
'**********************************************************
Dim A(1 To 15) As Integer
Dim Title As String
Dim String1 As String
String1 = "Сумма = "
Randomize
Title = "Сумма четных элементов одномерного массива"
Sum = 0
106
For i = 1 To 15
ArrayValue = Int((100 * Rnd) + 1)
A(i) = ArrayValue
Next i
For i = 1 To 15
If (Int(A(i) / 2) * 2 - A(i)) = 0 Then
Sum = Sum + A(i)
End If
Next i
MsgBox String1 & Sum, , Title
End Sub
Основное отличие данного примера от предыдущего заключается в том, что в переменной Sum накапливается сумма четных элементов массива. Для определения четных элементов используется выражение Int(A(i) / 2) * 2 - A(i), которое равно 0, если элемент четный и 1, если элемент нечетный.
Пример 6. Определить индексы второго положительного и третьего отрицательного элементов одномерного массива, состоящего из 20-ти элементов.
107
Sub InputArray6()
'**********************************************************
' Определить индексы второго положительного и третьего 'отрицательного элементов одномерного массива, состоящего из '20-ти элементов. Заполнение одномерного массива происходит 'при помощи датчика случайных чисел.
'**********************************************************
Dim A(1 To 20)
Dim рA, mpA, m, mmA As Integer
Dim Title As String
Dim String1 As String
Dim String2 As String
Dim String3 As String
Randomize
Title = "Индексы элементов одномерного массива"
String1 = "Второе положительное число = "
String2 = "Третье отрицательное число = "
String3 = ", индекс = "
For i = 1 To 20
ArrayValue = 100 - Int((200 * Rnd) + 1)
A(i) = ArrayValue
Next i
i = 0 jNum = 0
Do
108
i = i + 1
If A(i) > 0 Then jNum = jNum + 1
If jNum = 2 Then Exit Do
Loop While i < 20
pA = A(i)
mpA = i
i = 0
jNum = 0
Do
i = i + 1
If A(i) < 0 Then jNum = jNum + 1
If jNum = 3 Then Exit Do
Loop While i < 20
mA = A(i)
mmA = i
MsgBox String1 & pA & String3 & mpA & Chr(13) & _
String2 & mA & String3 & mmA, , Title
End Sub
Сначала в цикле For…Next происходит заполнение массива А случайными числами, находящимися в диапазоне от -100 до +100. Далее в цикле Do…Loop необходимо определить является ли очередной элемент массива положительным или нет. Если элемент – положительный, то переменная jNum, которая определяет число найденных положительных элементов увеличивается на 1. При выполнении условия jNum = 2 происходит выход из цикла и сохранение в переменных pA и mpA второго положительного элемента
109
массива и его индекса. Аналогично происходит поиск третьего отрицательного элемента массива и его индекса.
Пример 7. Задан одномерный массив размером N. Сформировать два массива, включая в первый массив четные элементы, а во второй нечетные элементы исходного массива. Отсортировать полученные массивы в порядке возрастания и вывести их во второй и третий столбец второго листа рабочей книги.
Sub InputArray7()
'**********************************************************
' Задан одномерный массив размером N. Сформировать два 'массива, включая в первый массив четные элементы, а во второй 'нечетные элементы исходного массива. Отсортировать 'полученные массивы в порядке возрастания и вывести и во 'второй и третий столбец второго листа рабочей книги.
'**********************************************************
Dim A() As Integer
Dim B() As Integer
Dim C() As Integer
Randomize
N = InputBox("Размер массива", "Заполнение одномерного массива")
ReDim A(1 To N)
For i = 1 To N
ArrayValue = Int((100 * Rnd) + 1)
A(i) = ArrayValue
Worksheets("Лист2").Cells(i + 1, 1) = A(i)
110
Next i
ReDim B(1 To N)
ReDim C(1 To N)
Worksheets("Лист2").Cells(1, 1) = " A "
Worksheets("Лист2").Cells(1, 2) = " B "
Worksheets("Лист2").Cells(1, 3) = " C "
'Заполнение массивов B и C jB = 0
jC = 0
For i = 1 To N
TestValue = A(i) - Int(A(i) / 2) * 2
Select Case TestValue
Case 0
jB = jB + 1 B(jB) = A(i)
Case 1
jC = jC + 1 C(jC) = A(i)
End Select Next i
'Сортировка массива В
For i = 1 To jB - 1
For j = 1 To jB - 1
If B(j + 1) < B(j) Then
111
temp = B(j) B(j) = B(j + 1) B(j + 1) = temp
End If
Next j
Next i
'Сортировка массива С
For j = 1 To jB
Worksheets("Лист2").Cells(j + 1, 2) = B(j)
Next j
For i = 1 To jC - 1
For j = 1 To jC - 1
If C(j + 1) < C(j) Then temp = C(j)
C(j) = C(j + 1) C(j + 1) = temp
End If Next j
Next i
For j = 1 To jC
Worksheets("Лист2").Cells(j + 1, 3) = C(j)
Next j
End Sub
Как и в предыдущих примерах, в первом цикле For…Next происходит заполнение массива А случайными числами, а далее во
112
втором цикле в массив B записываются четные числа, а в массив C
– нечетные числа. После этого начинается процесс сортировки массива B. Сравниваются два соседних элемента массива и если предыдущий элемент больше последующего, то производится перестановка этих элементов, которая осуществляется с использованием вспомогательной переменной temp:
temp = B(j)
B(j) = B(j + 1)
B(j + 1) = temp
Аналогично происходит сортировка массива С. Массивы А, В и С выводятся соответственно в колонки А, В и С Листа 2 рабочей книги Excel. Для решения поставленной задачи используются динамические массивы.
2.Практическая часть
Задание к лабораторной работе
Для заданного условия составить процедуру и придумать несколько наборов тестовых данных для отладки. Возможно использование как статических массивов, так и динамических. Ввод исходных данных осуществить из файла или с клавиатуры. Предусмотреть вывод результата в файл или на лист рабочей книги Excel.
1.Задан одномерный массив размером N. Определить количество отрицательных чисел, количество положительных чисел и среднее арифметическое всех чисел.
2.Задан одномерный массив размером N. Сформировать два массива размером N/2, включая в первый элементы исходного массива с четными индексами, а во второй с нечетными. Вычислить суммы элементов каждого из массивов.
113
3.Определить среднее арифметическое значение первого отрицательного и последнего положительного элементов одномерного массива размером М
4.Определить число отрицательных элементов, расположенных перед наибольшим положительным элементом одномерного массива размером М
5.В заданном одномерном массиве размером N поменять местами первый и последний положительные элементы.
6.Написать процедуру для вычисления суммы и среднего арифметического значения всех элементов заданного одномерного массива А, состоящего из 10-ти элементов.
7.Написать процедуру для вычисления суммы положительных элементов, заданного массива А, состоящего из 20-ти элементов.
8.Написать процедуру для вычисления суммы четных элементов заданного массива А, состоящего из 20-ти элементов.
9.Написать процедуру для определения количества положительных элементов, заданного массива А, состоящего из 20-ти элементов.
10.Написать процедуру для определения индексов положительных элементов, заданного массива А, состоящего из 20-ти элементов.
11.Написать процедуру для вычисления среднего арифметического значения всех элементов заданного массива D. Для отрицательных элементов использовать их абсолютные значения.
12.Написать процедуру для поиска в заданном массиве В, состоящем из 10-ти элементов, третьего положительного эле-
114
мента и его индекса. Известно, что хотя бы один положительный элемент в массиве В имеется.
13.Написать процедуру поиска в заданном массиве В, состоящем из 20-ти элементов, третьего положительного элемента и его индекса.
14.Написать процедуру для поиска в заданном массиве А(15) наибольшего значения элемента и его индекса.
15.Написать процедуру, в которой производится перестановка четных и нечетных элементов, заданного массива С.
16.Для заданного массива А, состоящего не более чем из 50-ти элементов, найти наименьший элемент и переставить его со вторым по порядку отрицательным элементом массива.
17.Написать процедуру по упорядочению элементов заданного массива В в следующем порядке: сначала идут положительные числа, потом – нули и в конце – отрицательные.
18.Написать процедуру сортировки по возрастанию заданного массива В, состоящего из 10-ти элементов.
19.Написать процедуру. Для заданного массива В, состоящего из 10-ти элементов, изменить порядок следования его элементов на обратный.
20.Написать процедуру, в которой для заданного массива В, состоящего из 10-ти элементов, его элементы перемещались бы например на 7 позиций вправо. При этом 7 элементов из конца массива перемещаются в начало.
21.Задан массив А. Поместить положительные элементы этого массива в массив В, а отрицательные элементы – в массив C
22.В заданном векторе (одномерном массиве) найти сумму первого и последнего отрицательных элементов
115
23.В заданном векторе (одномерном массиве) найти: разность первого и последнего нечетного элементов
24.В заданном векторе (одномерном массиве) найти: индексы наименьшего и наибольшего из элементов
25.В заданном векторе (одномерном массиве) найти: произведение трех наименьших элементов вектора
26.В заданном векторе (одномерном массиве) найти: сумму элементов вектора с четными индексами
27.В заданном векторе (одномерном массиве) найти: разность первого положительного и последнего отрицательного элемента
28.В заданном векторе (одномерном массиве) найти: число отрицательных элементов с нечетными индексами
29.В заданном векторе (одномерном массиве) найти: число элементов, расположенных после его наибольшего отрицательного элемента.
30.В заданном векторе (одномерном массиве) найти: наибольший отрицательный и наименьший положительные элементы.
116
ЛАБОРАТОРНАЯ РАБОТА № 6 Обработка двумерных массивов
1.Краткие теоретические сведения
Любой массив (одномерный, двумерный или даже многомерный) представляет собой просто набор (или коллекцию) однотипных данных, которые называются элементами массива. При обращении к элементу указывается имя массива и индекс (номер элемента последовательности), если массив одномерный. Положение элемента двумерного массива определяют два индекса, которые задают номер строки и номер столбца двумерной таблицы, на пересечении которых расположен элемент.
Прежде чем использовать массив, его следует описать. При описании статического массива необходимо определить нижнюю и верхнюю границы каждого индекса, причем эти границы не могут быть изменены внутри программы.
Примеры:
Dim arrА(l То 10, 3 То 12) As Integer 'Переменная arrА представляет 'собой двумерный массив с тип-
'ом данных каждого элемента
'Integer. Первый элемент масси-
'ва – arrА(1, 3), последний
'arrА(10, 12), число элементов
'массива 10*10=100
117