Лабораторная работа №5_4. Разработка процедур и функций обработки массивов (диапазонов) В качестве параметра в функциях обработки массивов используется диапазон произвольных размерностей (A As Variant). При вызове функции задается реальный диапазон. Если нужно получить реальные размерности массива (диапазона) в функции используются следующие операторы: m = a.Rows.Count (количество строк) и n = a.Columns.Count (количество столбцов). Если функция в качестве результата должна возвратить массив чисел имени функции необходимо присвоить имя возвращаемого массива. Примеры функций на VBA функция вычисления суммы элементов массива А 1-й способ Public Function Сумма_массива(A As Variant) ‘ функция вычисления суммы элементов массива А Dim s aS Variant, x As Variant s=0 For Each x In A s=s+x Next x Сумма_массива = s End Function 2-й способ Public Function SumMas(a As Variant) ‘ функция вычисления суммы элементов массива А Dim m as Integer Dim n as Integer Dim r as Integer Dim c as Integer m = a.Rows.Count ' количество строк n = a.Columns.Count 'количество столбцов s=0 For r = 1 To m For c = 1 To n s = s + a(r, c) Next c Next r SumMas=s End Function функция подсчета количества положительных элементов массива А Public Function CountP(a As Variant) ‘ функция подсчета количества положительных элементов массива А Dim m as Integer Dim n as Integer Dim r as Integer Dim c as Integer m = a.Rows.Count n = a.Columns.Count k= 0 For r = 1 To m For c = 1 To n If a(r,c) > 0 Then k=k+1 Next c Next r CountP=k End Function нахождения максимального и минимального значения массива А Public Function max_min_A(a As Variant) ‘ функция нахождения максимального и минимального значения массива А Dim m as Integer Dim n as Integer n = a.Columns.Count m = a.Rows.Count minimal = a(1, 1) maximal = a(1, 1) For r = 1 To m For c = 1 To n If a(r, c) < minimal Then minimal = a(r, c) If a(r, c) > maximal Then maximal = a(r, c) Next c Next r max_min_A = "Минимальный эл-т:" + Str(minimal) + ", максимальный эл-т:" + Str(maximal) End Function упорядочивание одномерного массива по возрастанию значений элементов Public Function УПОРЯДОЧИТЬ_МАССИВ_ВОЗР(A As Variant) ‘ упорядочивание одномерного массива по возрастанию значений элементов Dim n As Integer Dim i As Integer Dim j As Integer n = a.Columns.Count ReDim B(1 To n) As Variant For i = 1 To n b(i) = a(i) Next i For i = 1 To n For j = 1 To n If b(i) < b(j) Then c = b(i) b(i) = b(j) b(j) = c End If Next j Next i УПОРЯДОЧИТЬ_МАССИВ_ВОЗР = B End Function нахождения минимального значения массива, расположенного в заданном диапазоне C15:D20 Public Function Минимум_в_заданном() ‘ нахождения минимального значения в заданном диапазоне Dim r As Integer, c As Integer, minimal As Variant minimal = Cells(15, 3) For r = 15 To 20 For c = 3 To 4 If Cells(r, c) < minimal Then minimal = Cells(r, c) End If Next c Next r Минимум_в_заданном = minimal End Function процедура обнуления отрицательных элементов в выделенном диапазоне Public Sub Обнуление_отрицательных_в_выделенном() ‘ процедура обнуления отрицательных элементов в выделенном диапазоне Dim i As Integer, j As Integer, n As Integer m = Selection.Rows.Count n = Selection.Columns.Count For i = 1 To m For j = 1 To n If Selection(i, j) < 0 Then Selection(i, j) = 0 End If Next j Next i End Sub Лабораторные задания На VBA составить функции для: 1. нахождения суммы (количества) положительных (отрицательных) элементов массива; 2. нахождения суммы (количества) элементов массива стоящих на четных (нечетных) местах; 3. нахождения произведения отрицательных (положительных) элементов массива, заданного в ячейках B10:D20; 4. подсчета количества отрицательных (положительных, нулевых, кратных k) элементов массива; 5. нахождения суммы четных (нечетных, кратных n) элементов массива выделенного диапазона ячеек; 6. нахождения НОД (НОК) элементов массива; 7. нахождения минимального (максимального) элемента массива и места его расположения в массиве (номера строки и номера столбца); 8. нахождения максимального среди отрицательных (минимального среди положительных элементов массива); 9. нахождения двух самых больших (самых маленьких) элементов массива; 10. упорядочивания массива А(n) по убыванию значений элементов. Задания для самостоятельного решения 11. нахождения минимального и максимального элемента массива, выполнив наименьшее число сравнений О(1.5n), где n число элементов в массиве; 12. расположения элементов массива в следующем порядке – положительные, отрицательные и нулевые; 13. в упорядоченном массиве, найти такие два элемента, произведение которых максимально (минимально); 14. из двух упорядоченных по возрастанию массивов, получить третий, упорядоченный по возрастанию; 15. упорядочить строки двумерного массива А(m,n) по возрастанию значений элементов К-го столбца.