Читайте также: |
|
Сортировка поиском максимального элемента.
Private Sub knopka()
Dim i As Integer, j As Integer, k As Integer, n As Integer
Dim a() As Integer
n=10
ReDim a(n) ←(Отводит память под массив)
For i=1 to n ‘Cоздаёт массив,
a(i)=Int(100*Rnd) заполненный рандомными
cells(i,1)=a(i) элементами)
Next i ‘Сортировка *(Rnd-псевдо случайное число,
Call MaxSoft(n,a()) Int-целые)
For i=1 to n ‘Записывает в ячейки результат,
Cells(i,4)=a(i) чтобы мы увидели, что он отсортирован
Next i
End Sub
MaxSoft-Получает значение через параметры n и a, выполняет работу сортировки и результат сортировки возвращает через эти же параметры в главную программу.
Sub MaxSoft (n As Integer, a() As Integer)
Dim i As Integer, j As Integer, k As Integer
Dim iMax As Integer, aMax As Integer
For j=n to 2 step -1
aMax=a(1):iMax=1
For i=2 to j
If a(i)>aMax then
aMax=a(i)
iMax=i
End If
Next i
k=a(j):a(j)=a(iMax):a(iMax)=k ‘Обмен элементов местами
Next j
End Sub
Схематическое описание сортировки поиском максимального значения.
Алгоритм сортировки поиском максимального значения схематично можно представить, как серию укорачивающихся просмотров исходного массива (внешний цикл). Во время каждого из таких просмотров ищется максимальный элемент и ставится на последнее, предпоследнее и т.д. место (в зависимости от номера просмотра). При последнем просмотре массива проверяются только 2 первых элемента.
-Обе сортировки одинаково формируют множество уже отсортированных элементов, которое будет расти с конца массива к началу от самого большого элемента к самому маленькому (внешне одинаковы).
-Количество сравнений одинаково в обеих сортировках.
-В пузырьковой сортировке обмениваются 2 соседних числа, а в сортировке поиском максимального значения …….?
с числом, выполняющим роль максимального.
-В пузырьковой сортировке обменом больше.
Вычисление площади многоугольника с помощью триакуляции??
Private Sub click()
Dim N As Integer, i As Integer, no As Double, n As Double, h As Double, alpha As Double, s As Double
N=cells(3,2):no=cells(3,3):h=8*Atn(1)/N
ReDim x(1 to N) As Double, y(1 to N) As Double ‘Вычисляем координаты вершин многоугольника и строим его
For i=1 to N
alpha=n*i n=no*(1+Rnd)
x(i)=n*cos(alpha):y(i)=n*sin(alpha)
Cells(i+2,4)=x(i):cells(i+2,5)=y(i)
Next i
Cells(N+3,4)=x(1):cells(N+3,5)=y(1) ‘Перебираем треугольники,суммируем площади
s=0
For i=1 to N-1
s=s+s_TR (x(i),y(i),x(i+1),y(i+1),0,0) ‘Считаем площадь отдельно взятого треугольника
Next i
s=s+s_TR(x(N),(y(N),x(1),y(1),0,0) ‘Считаем площадь отдельно взятого треугольника
cells(4,3)=s
End Sub
Function S _ Tr (x1 As Double, y1 As Double, x2 As Double, y2 As Double,
x3 As Double, y3 As Double) As Double
Dim a As Double, b As Double, c As Double, p As Double
a=dist (x1,y1,x2,y2)
b=dist(x2,y2,x3,y3)
c=dist(x3,y3,x1,y1)
p=(a+b+c)/2
S_TR=Sqr(p*(p-a)*(p-b)*(p-c))
End Function
Function dist (x1 As Double, y1 As Double, x2 As Double, y2 As Double) As Double
dist=Sqr((x-x2)^2+(y1-y2)^2) ‘Вычисляет расстояние между точками
End Function
Площадь треугольников считается по формуле Герона.
Если заблокировать Rnd в главной программе, то многоугольник будет правильным.
Рекурсия.
Рекурсивный алгоритм, если его описание содержит обращение к самому себе!
Программа рекурсивная, если она вызывает сама себя!
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
Вычисление наибольшего общего делителя
Алгоритм Эвклида.
Private Sub click()
Dim a As Long, b As Long, c As Long
a=cells(1,1)
b=cells(1,2)
c=Nod(a,b)
cells(1,3)=c
MsgBox “ok”
Range(“A1:C1”).ClearContents
End Sub
Public Function Nod(a As Long, b As Long) As Long
Dim r As Long
If b>a Then r=a:a=b:b=r
r=a Mod b
If r>0 Then Nod=Nod(b,r) Else Nod=b
End Function
Дата добавления: 2015-01-07; просмотров: 15 | Поможем написать вашу работу | Нарушение авторских прав |