Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Описание выполнения всех заданий по VB.doc
Скачиваний:
1
Добавлен:
21.07.2019
Размер:
1.89 Mб
Скачать

Описание выполнения Задания 5.

Название работы: Задание 5.

Тема задания: “Процедуры и функции пользователя”.

Цель задания: Освоение принципов создания собственных процедур и функций пользователя, создания стандартного модуля в приложении и ознакомление с элементом управления ComboBox.

В этом задании нужно решить одну и ту же задачу, как с помощью создания пользовательской процедуры, так и с помощью создания соответствующей функции. В качестве примера выполнения данного задания ниже приводится решение следующей задачи:

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

Y =

принимая, что аргумент Х по модулю меньше единицы. Вычисления проводить до тех пор, пока модуль разности между очередным слагаемым и его предыдущим значением больше малой заданной величины, рассматриваемой в качестве точности вычислений.

Полученные подпрограммы записать в модуль. Используя подпрограммы модуля, вывести на экран с заданной точностью таблицу значений Y для аргумента Х от его заданного начального значения до заданного конечного значения с заданным шагом.

Создаем на дискете папку “Задание_5”, в которой нужно будет сохранить проект с 5-м заданием.

Открываем новый проект и размещаем на форме 8 меток, элементы ComboBox и ListBox, 2 командные кнопки.

Таблица свойств формы и расположенных на ней элементов управления

Объект

Свойство

Значение свойства

Форма

Name

Caption

Font

frmZ5r

Процедуры и функции пользователя

Times New Roman, жирный, размер 12

Метка

Name

Caption

Alignment

Font

Label1

Выводится условие текущей задачи

0-левая привязка

MS Sans Serif, обычный, размер 8

Метка

Name

Caption

Alignment

Font

ForeColor

Label2

Исходные данные

2-центровка

MS Sans Serif, жирный, размер 12

vbBlue

Метка

Name

Caption

Alignment

Font

Label3

Значение задается в процедуре

0-левая привязка

MS Sans Serif, обычный, размер 8

Метка

Name

Caption

Alignment

Font

Label4

Значение задается в процедуре

0-левая привязка

MS Sans Serif, обычный, размер 8

Метка

Name

Caption

Alignment

Font

Label5

Значение задается в процедуре

0-левая привязка

MS Sans Serif, обычный, размер 8

Метка

Name

Caption

Alignment

Font

Label6

Значение задается в процедуре

0-левая привязка

MS Sans Serif, обычный, размер 8

Метка

Name

Caption

Alignment

Font

ForeColor

Label7

Результат вычислений

2-центровка

MS Sans Serif, жирный, размер 12

vbRed

Метка

Name

Caption

Alignment

Font

ForeColor

Label8

X Y

2-центровка

MS Sans Serif, жирный курсив, размер 14

vbBlue

Комбинированный список

Name

Text

Font

ForeColor

Combo1

Выбор средства

Times New Roman, обычный, размер 11

vbBlue

Список

Name

List1

Командная кнопка

Name

Caption

Font

BackColor

Command1

MS Sans Serif, обычный, размер 8

Вычислить

&HFFFFC0

Командная кнопка

Name

Caption

Font

BackColor

Command2

MS Sans Serif, обычный, размер 8

Выход

&HC0FFC0

Вид формы frmZ5r:

Процедура вывода условия задачи в момент загрузки формы:

Private Sub Form_Load()

Label1 = " Составить процедуру и функцию для вычисления:" & vbCrLf & _

"Y = 1 + 2/x + 2*3/x^2 + 2*3*2/x^3 + 2*3*2*3/x^4 + ... ," & vbCrLf & _

"принимая, что аргумент X по модулю меньше единицы. Вычисления проводить до тех пор, пока модуль " & vbCrLf & _

"разности между очередным слагаемым и его предыдущим значением больше заданной величины, " & vbCrLf & _

"рассматриваемой в качестве точности вычислений." & vbCrLf & _

" Полученные подпрограммы записать в модуль. Используя подпрограммы модуля, вывести с заданной " & vbCrLf & _

"точностью таблицу значений Y для аргумента X от его заданного начального значения до заданного " & vbCrLf & _

"конечного значения с заданным шагом изменения."

End Sub

Процедура и функция стандартного модуля приложения,

вычисляющие сумму членов ряда для заданного значения x:

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#) As Double

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

Процедура, вычисляющая значения сумм ряда для значений x

из заданного диапазона:

Private Sub Command1_Click()

Dim x As Single, y As Double

Dim xn As Single, dx As Single, xk As Single

Dim eps As Double, b As Boolean, s As String

Dim g As Double, i As Byte, j As Byte

xn = Val(InputBox("Введите начальное значение x"))

Label3.Caption = "Начальное значение x = " & xn

dx = Val(InputBox("Введите шаг по x"))

Label4.Caption = "Шаг по x = " & dx

xk = Val(InputBox("Введите конечное значение x"))

Label5.Caption = "Конечное значение x = " & xk

eps = Val(InputBox("Введите точность вычисления"))

Label6.Caption = "Точность вычислений = " & eps

'Выбор средства вычислений: с помощью процедуры или функции

If Combo1.Text = "Процедура" Then

b = True

Else

b = False

End If

'Вычисление значения суммы ряда для заданного интервала значений x.

List1.Clear

x = xn

Do While x < xk + 0.5 * dx

If b Then

Call p(x, eps, y)

Else

y = f(x, eps)

End If

' Вывод результатов вычисления суммы ряда с заданной точностью

g = eps: j = 0

Do While g < 1

g = g * 10

j = j + 1

Loop

s = "#0."

For i = 1 To j

s = s & "0"

Next i

List1.AddItem " " & Format(x, "0.00") & Space(16) & Format(y, s)

' Переход к следующему значению x из заданного диапазона

x = x + dx

Loop

End Sub

Вид формы с результатом решения задачи с помощью созданной

процедуры пользователя.

Вид формы с решением той же задачи с использованием созданной функции пользователя.

Процедура завершения работы приложения:

Private Sub Command3_Click()

End

End Sub

Как обычно добавляем к проекту форму-заставку frmZ5z. После ее разработки запускаем приложение на выполнение.

Вопросы для защиты Задания 5.

1. Назначения и основные свойства элементов управления ListBox и

MSFlexGrid.

2. Как добавить элемент MSFlexGrid на панель элементов управления?

3. Как выделить цветом отдельную ячейку элемента MSFlexGrid?

4. Какие существуют способы заполнения списка ListBox ( на этапах run и

design)?

5. В чем отличие в добавлении новых элементов в уже существующий список

ListBox с помощью свойства List и метода AddItem?

6. Отличие в предназначении цикла с параметром от итерационных циклов.

7. Как досрочно выйти из цикла с параметром и из итерационных циклов

любого типа?

8. В чем отличия итерационных циклов с предусловием и постусловием?

9. В чем отличия в работе итерационных циклов, в конструкции которых

используются ключевые слова While и Until?

10. Какие виды массивов существуют и как они объявляются?

11. Как переопределить размерность массива с сохранением его

содержимого?

12. Назначение функции Rnd и оператора Randomize.

Желаю успешной защиты Задания 5!