Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_6.doc
Скачиваний:
97
Добавлен:
01.12.2018
Размер:
3.77 Mб
Скачать

Приложение 4. Примеры создания процедур и функций.

Пример 1. Составить процедуру сортировки по возрастанию элементов

одномерного массива.

Private Sub SortMas(ar%(), m%)

Dim i%, j%, tmp%

' Аргументы процедуры:

' ar - передаваемое процедуре имя массива

' m - передаваемый процедуре размер массива

For i = 1 To m - 1

For j = i + 1 To m

If ar(i) > ar(j) Then

tmp = ar(i)

ar(i) = ar(j)

ar(j) = tmp

End If

Next j, i

End Sub

Использование данной процедуры:

Private Sub Form_Load()

Label1 = " Составить процедуру сортировки по возрастанию значений

элементов массива b(k) (k- заданное число). Используя процедуру,

рассортировать по возрастанию значения элементов каждого столбца

матрицы a(5,4)"

End Sub

Private Sub Command1_Click()

Dim a%(1 To 5, 1 To 4), b%(1 To 5), i%, j%

' Задаем кол-ва строк и столбцов элементов MSFlexGrid1 и

' MSFlexGrid2

fg1.Rows = 6: fg1.Cols = 5

fg2.Rows = 6: fg2.Cols = 5

' Делаем одинаковыми ширины столбцов у обоих элементов

For j = 0 To 4

fg1.ColWidth(j) = fg1.Width \ 6

fg2.ColWidth(j) = fg2.Width \ 6

Next j

' Вводим исходную матрицу и отображаем ее в элементе MSFlexGrid1

Randomize

For i = 1 To 5

For j = 1 To 4

a(i, j) = Int(Rnd * 100)

fg1.TextMatrix(i, j) = a(i, j)

Next j, i

' Нумеруем столбцы обоих элементов

For j = 1 To 4

fg1.TextMatrix(0, j) = j

fg2.TextMatrix(0, j) = j

Next j

' Нумеруем строки обоих элементов

For i = 1 To 5

fg1.TextMatrix(i, 0) = i

fg2.TextMatrix(i, 0) = i

Next i

' Для каждого столбца исходного массива a копируем его элементы во

' вспомогательный одномерный массив b, вызываем созданную

‘ процедуру сортировки в массиве b и затем копируем отсортированный

‘ массив b в соответствующий столбец исходного двумерного массива

For j = 1 To 4

For i = 1 To 5

b(i) = a(i, j)

Next i

Call SortMas(b, 5)

For i = 1 To 5

a(i, j) = b(i)

Next i

Next j

' Отображаем преобразованный исходный массив в элементе

‘ MSFlexGrid2

For i = 1 To 5

For j = 1 To 4

fg2.TextMatrix(i, j) = a(i, j)

Next j, i

End Sub

Пример 2. Составить процедуру поиска максимального элемента

массива.

Private Sub MaxMas(ar%(), m%, mx%, nm%)

Dim i%

' Аргументы процедуры:

' ar - передаваемое процедуре имя массива

' m - передаваемый процедуре размер массива

' mx - возвращаемое процедурой значение максимального элемента

массива

' nm - возвращаемый процедурой номер максимального элемента

массива

mx = ar(1): nm = 1

For i = 2 To m

If ar(i) > mx Then mx = ar(i): nm = i

Next i

End Sub

Использование данной процедуры:

Private Sub Form_Load()

Label1.Caption = " Составить процедуру нахождения максимального

элемента массива mas(k) и его номера (k – заданное число). Используя

процедуру, найти max значения и их номера в каждом столбце исход-

ного двумерного массива".

End Sub

Private Sub Command1_Click()

Dim mas%(), ms%(), m%, n%, i%, j%, max%, i_max%, k%

' Значения переменных процедуры:

' mas - исходный двумерный массив

' ms - вспомогательный массив (любой столбец массива mas)

' m - кол-во строк массива mas и одновременно размер массива ms

' n - кол-во столбцов массива mas

' i, j - вспомогательные переменные (параметры регулярных

циклов)

' max - искомое максимальное значение элементов в заданном

столбце

' i_max - искомый номер последнего максимального элемента в

столбце

m = InputBox("Введите количество строк массива", , 6)

n = InputBox("Введите количество столбцов массива", , 8)

ReDim mas(1 To m, 1 To n), ms(1 To m)

' Задаем параметры элемента MSFlexGrid и нумеруем его строки,

fg.Rows = m + 1: fg.Cols = n + 1

For i = 0 To m

fg.TextMatrix(i, 0) = i

Next i

' Делаем все столбцы элемента одинаковой ширины и нумеруем их

For j = 0 To n

fg.ColWidth(j) = fg.Width / (n + 2)

fg.TextMatrix(0, j) = j

Next j

' Вводим элементы исходного массива и отображаем его в элементе

‘ MSFlexGrid

Randomize

For i = 1 To m

For j = 1 To n

mas(i, j) = Int(Rnd * 100) - 50

fg.TextMatrix(i, j) = mas(i, j)

Next j, i

' Каждый столбец матрицы копируем во вспомогательный одномер-

‘ ный массив ms

For j = 1 To n

For i = 1 To m

ms(i) = mas(i, j)

Next i

' Вызываем процедуру поиска max элемента и помечаем его цветом в

' текущем столбце матрицы

Call MaxMas(ms, m, max, i_max)

fg.Row = i_max: fg.Col = k

fg.CellBackColor = vbGreen

Next j

End Sub

Пример 3. Составить процедуру и функцию вычисления суммы ряда:

y = 1 – x / 1! + x^2 / 2! – x^3 / 3! + …

Public Sub p(ByVal x!, ByVal eps#, ByRef sum#)

Dim i%, nom%, fact!, znak%, pr#, sl#

sum = 1: pr = 0: sl = 1

znak = 1: fact = 1: nom = 0

Do While Abs(Abs(pr) - Abs(sl)) > eps

nom = nom + 1

znak= - znak

For i = 1 To nom

fact = fact / i

Next i

pr = sl

sl = znak * x^nom * fact

sum = sum + sl

Loop

End Sub

Public Function f#(ByVal x!, ByVal eps#)

Dim sum#, i%, nom%, fact!, znak%, pr#, sl#

sum = 1: pr = 0: sl = 1

znak = 1: fact = 1: nom = 0

Do While Abs(Abs(pr) - Abs(sl)) > eps

nom = nom + 1

znak= - znak

For i = 1 To nom

fact = fact / i

Next i

pr = sl

sl = znak * x^nom * fact

sum = sum + sl

Loop

f = sum

End Function

Пример 4. Составить процедуру и функцию вычисления суммы ряда:

Y =

Public Sub p(ByVal x!, ByVal eps#, ByRef sum#)

Dim pred#, posl#

Dim ch%, sum_sk_ch%, sk_ch%

Dim zn%, sum_sk_zn%, sk_zn%

Dim z%, kf!

' sum_sk_ch - сумма скачков между соседними числовыми

' сомножителями числителя

' sk_ch - текущий скачок между соседними числовыми

' сомножителями числителя

' sum_sk_zn - сумма скачков между соседними числовыми

' сомножителями знаменателя

' sk_zn - текущий скачок между соседними числовыми

' сомножителями знаменателя

' ch - очередной числовой сомножитель числителя

' zn - очередной числовой сомножитель знаменателя

' z - знак очередного члена ряда

' kf - числовой коэффициент очередного члена ряда

ch = 1: sum_sk_ch = 6: sk_ch = 4

zn = 2: sum_sk_zn = 9: sk_zn = 5

z = -1: sum = 1 - x / 2

pred = 1: posl = -x / 2

Do While Abs(Abs(pred) - Abs(posl)) > eps

sk_ch = sum_sk_ch - sk_ch: ch = ch + sk_ch

sk_zn = sum_sk_zn - sk_zn: zn = zn + sk_zn

kf = ch / zn: z = -z

pred = posl

posl = pred * z * kf * x

sum = sum + posl

Loop

End Sub

Public Function f#(ByVal x!, ByVal eps#)

Dim pred#, posl#, sum#

Dim ch%, sum_sk_ch%, sk_ch%

Dim zn%, sum_sk_zn%, sk_zn%

Dim z%, kf!

ch = 1: sum_sk_ch = 6: sk_ch = 4

zn = 2: sum_sk_zn = 9: sk_zn = 5

z = -1: sum = 1 - x / 2

pred = 1: posl = -x / 2

Do While Abs(Abs(pred) - Abs(posl)) > eps

sk_ch = sum_sk_ch - sk_ch: ch = ch + sk_ch

sk_zn = sum_sk_zn - sk_zn: zn = zn + sk_zn

kf = ch / zn: z = -z

pred = posl

posl = pred * z * kf * x

sum = sum + posl

Loop

f = sum

End Function

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]