
- •4. Назначение и способы реализации на vba циклов со счетчиком. Синтаксис оператора for..
- •7. Иллюстрация сочетания цикла и ветвления ..Методом дихотомии (или методом касательных).
- •11. Одномерные массивы..
- •12. Простейшие методы сортировки: пузырьковая, поиском максимального элемента.
- •13. Двумерные массивы …
- •Вопрос 16. Рекурсия. Рекурсивный алгоритм вычисление факториала.Рекурсивный алгоритм, если его описание содержит обращение к самому себе!Программа рекурсивная, если она вызывает сама себя!
- •Вопрос 17. Рекурсия. Рекурсивный алгоритм вычисление нод(a,b).
- •Вопрос 18. Рекурсия. Задача о Ханойских башнях.
- •Вопрос 19. Стек. Алгоритм проверки правильности расстановки скобок разных типов.
- •Вопрос 20. Двоичные деревья. Алгоритмы обхода узлов двоичного дерева.
- •Вопрос 21. Графы. Алгоритм поиска достижимых вершин графа.
- •Вопрос 15. Процедуры..
7. Иллюстрация сочетания цикла и ветвления ..Методом дихотомии (или методом касательных).
Решение нелинейного уравнения методом Ньютона.
Sub Newton(x0 As Double, x As Double, count (заголовок) As Integer)
count=0
start:
x=x0-f(x0)/f1(x0) ‘Расчётная формула метода Ньютона
count=count+1
Debug.Print count; x; x0 ‘Отладочная печать
If x=x0 Then Exit Sub ‘Выход из процедуры
x0=x:GoTo start
End Sub
Чтобы написать уравнение, нужно написать уравнение касательной к графику функции f(x) в точке x0, а затем искать точку пересечения с осью 0x.
Sub knopka()
Dim a As Double, b As Double, x As Double, i As Integer
a=0:b=1,5: i=1
For x=a to b step(b-a)/20 ‘Вычисление таблицы
i=i+1 со
cells(i,1)=x:cells(i,2)=f(x) значениями
next x
Call Newton (b,x,i) ‘вызов процедуры
Cells(2,3)=x:cells(2,4)=f(x):cells(2,5)=i
End Sub
При вызове функции происходит подстановка фактических параметров вместо формальных, указанных в заголовке процедуры (вместо x0). Сопоставление междуфактическими и формальными параметрами происходит не по именам (названиям) переменных, а по их порядковым номерам в списке параметров)
Переменная из Call сопоставляется с первой из названия Sub Newton т.е.
b-x0
x-x
i-count
Function f(x As Double) As Double
f=Cos(x)-x ‘Функция
End Function
Function f1(x As Double) As Double
f1=-Sin(x)-1 ‘Производная
End Function
9. Приближенное решение задачи Коши .. о движении камня, брошенного под углом к горизонту с учетом силы трения.
Sub Кнопка()
Dim v As Double, alpha As Double, m As Double
Dim a As Double, b As Double, c As Double, dt As Double
Dim t As Double, x As Double, y As Double
Dim vx As Double, vy As Double, ax As Double, ay As Double
Dim ftr As Double, s_alpha(для Sin) As Double, c_alpha(для Cos) As Double
Dim count As Integer
const g=9,81
const Pi=3,14159265358979
Range (“A4:H1000”).Clear Contents
v=cells(2,1)
alpha=cells(2,2)*Pi/180
a=cells(2,4):b=cells(2,5):c=cells(2,6)
m=cells(2,3)
dt=cells(2,7)
s+alpha=sin(alpha):c_alpha=cos(alpha)
t=0:count=0:x=0:y=0
vx=v*c_alpha:vy=v*s_alpha
povtor:
ftr=a*v^2+b*v+c ‘модуль силы сопротивления
ax=-sgn(vx)*ftr*c_alpha/m ‘Ускорение по Ox и Oy;
ay=-g-sgn(vy)*ftr*s_alpha/m sgn-знак
cells(4+count,1)=t
cells(4+count,2)=x
cells(4+count,3)=y
cells(4+count,4)=vx
cells(4+count,5)=vy
cells(4+count,6)=ax
cells(4+count,7)=ay
cells(4+count,8)=ftr
count=count+1
t=t+dt
cells(2,8)=t
vx=vx+ax*dt
vy=vy+ay*dt
v=sqr(vx^2+vy^2)
s_alpha=vy/v
c_alpha=vx/v
x=x+vx*dt
y=y+vy*dt
If y>0 then GoTo povtor
End Sub
10. Программирование вложенных циклов. Вложенные циклы. Тело любого оператора цикла может содержать дру-
гие циклы. Такие конструкции называют вложенными циклами. Вложенные
циклы (цикл в цикле) применяют обычно в задачах, когда требуется связать или
сравнить каждый элемент одного множества с каждым элементом другого
множества.
Правила записи вложенных циклов:
1.при записи вложенных циклов используется правило матрешки, т.е. сначала закрывается цикл , который открылся последним, затем закрывается цикл, который открылся предпоследним и т.д.
2.для каждого значения параметра внешнего цикла , параметр внутреннего цикла изменяется от начального значения до конечного с заданным шагом.
3.в качестве параметра цикла для вложенных циклов нельзя использовать одну и ту же переменую,т.к.к изменение переменной внешнего цикла нарушится изменениями переменной внутреннего цикла.
4.Если циклы FOR/NEXT вложены в друг друга,то в качестве последнего оператора можно использовать один оператор NEXT.(если циклы заканчиваются одновременно). Пример программы с вложенными циклами в VBA:
For i = 1 To 7
For j = 1 To 5
If i <= j Then
Cells(i, j) = 1
End If
Next j
Next i
Н-р,