Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лекция V

Читайте также:
  1. Амплитудная селекция
  2. Беседа как метод обучения детей дошкольного возраста диалогической речи (лекция).
  3. Вводная лекция
  4. Вводная лекция
  5. Вопрос 1.Лекция.
  6. Воскресная лекция Шрилы Радханатхи Свами в Киеве о Бхакти Тиртхе Свами
  7. Временная селекция
  8. Вступительная лекция.
  9. Вступительная лекция.
  10. ВТОРАЯ ЛЕКЦИЯ

Сортировка поиском максимального элемента.

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 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав