
- •4. Назначение и способы реализации на vba циклов со счетчиком. Синтаксис оператора for..
- •7. Иллюстрация сочетания цикла и ветвления ..Методом дихотомии (или методом касательных).
- •11. Одномерные массивы..
- •12. Простейшие методы сортировки: пузырьковая, поиском максимального элемента.
- •13. Двумерные массивы …
- •Вопрос 16. Рекурсия. Рекурсивный алгоритм вычисление факториала.Рекурсивный алгоритм, если его описание содержит обращение к самому себе!Программа рекурсивная, если она вызывает сама себя!
- •Вопрос 17. Рекурсия. Рекурсивный алгоритм вычисление нод(a,b).
- •Вопрос 18. Рекурсия. Задача о Ханойских башнях.
- •Вопрос 19. Стек. Алгоритм проверки правильности расстановки скобок разных типов.
- •Вопрос 20. Двоичные деревья. Алгоритмы обхода узлов двоичного дерева.
- •Вопрос 21. Графы. Алгоритм поиска достижимых вершин графа.
- •Вопрос 15. Процедуры..
13. Двумерные массивы …
При работе с таблицами часто нужно применить одну и туже операцию к целому диапазону ячеек или выполнить расчеты по формулам,зависящим от большого массива данных,к таким задачам относятся,например,умножение матрицы на матрицу или умножение матрицы на число.Для решения таких задач в exelе можно исп.массивы. Диапазон массива-это блок ячеек,который имеет общ. Формулу массива. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам. Наглядно двумерный массив удобно представлять в виде таблицы, в которой n строк и m столбцов, а под ячейкой таблицы, стоящей в i-й строке и j-м столбце понимают некоторый элемент массива a[i][j]. По-другому двумерный массив также называют матрицей, а в том случае, когда n=m.
Умножение матрицы на вектор Пример. Дана матрица А(2,3) и вектор В(3). Найти произведение А*В. Программа Sub UmnMatNaVec() Dim a(2, 3) As Single, b(3) As Single, c(2) As Single Dim s As Single, i, j As Integer 'ввод матрицы For i = 1 To 2 For j = 1 To 3 a(i, j) = Cells(i + 1, j) Next j Next i 'ввод массива For i = 1 To 3 b(i) = Cells(4, i + 1) Next i For i = 1 To 2 s = 0 For j = 1 To 3 s = s + a(i, j) * b(j) Next j c(i) = s Next i 'вывод нового массива b(5) Cells(6, 1) = "Массив c(2)" For i = 1 To 2 Cells(6, i + 1) = c(i) Next i End Sub
Умножение матриц
Private Sub CommandButton1_Click()
Dim i As Double, j As Double, n As Double
Dim a() As Double, b() As Double, c() As Double, k As Double
n = InputBox("Введите n")
ReDim a(1 To n, 1 To n), b(1 To n, 1 To n), c(1 To n, 1 To n)
Cells(1, 1) = "Матрица А"
Cells(11, 1) = "Матрица В"
Cells(1, 14) = "Матрица АВ"
For i = 1 To n
For j = 1 To n
a(i, j) = (n - j) * Cos(i)
Cells(i + 1, j) = a(i, j)
Next j
Next i
For i = 1 To n
For j = 1 To n
If i < j Then
b(i, j) = 1 / (i + j - 1)
ElseIf i = j Then
b(i, j) = 0
Else
b(i, j) = (-1) / (i + j - 1)
End If
Cells(i + 11, j) = b(i, j)
Next j
Next i
For i = 1 To n
For j = 1 To n
For k = 1 To n
c(i, j) = c(i, j) + a(i, k) * b(k, j)
Next k
Cells(i + 1, j + 13) = c(i, j)
Next j
Next i
End Sub
Вопрос 16. Рекурсия. Рекурсивный алгоритм вычисление факториала.Рекурсивный алгоритм, если его описание содержит обращение к самому себе!Программа рекурсивная, если она вызывает сама себя!
n!= 1,n=0,1
(n-1)!*n
Sub click()
Dim n As Integer
n=cells(2,1)
cells(2,2)=f(n)
End Sub
Function f(n As Integer) As Double
Debug.Print “на входе n=”; n; “f=”; f
If n>1 then f=f(n-1)*n Else f=1
Debug.Print “на выходе n=”;n;”f=”;f
End Function
Debug.Print -способ печати
на входе n=3 f=0
на входе n=2 f=0
на входе n=1 f=0
на выходе n=1 f=1 n=3
на выходе n=2 f=2
на выходе n=3 f=6