Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

информатика.методичка

.pdf
Скачиваний:
37
Добавлен:
29.03.2015
Размер:
2.63 Mб
Скачать

Рис. 7.1 Рис. 7.1

Выполнение этой лабораторной работы целесообразно начинать с копирования программного модуля VBA из лабораторной работы «Табулирование разветвляющейся функции».

ПРОГРАММНЫЙ МОДУЛЬ VBA ИЗ ЛАБОРАТОРНОЙ РАБОТЫ «ТАБУЛИРОВАНИЕ РАЗВЕТВЛЯЮЩЕЙСЯ ФУНКЦИИ» СКОПИРОВАТЬ В МОДУЛЬ ПЕРВОГО ОБЪЕКТА

CommandButton1 ЛАБОРАТОРНОЙ РАБОТЫ «ОПЕРАТОРЫ ЦИКЛА».

Внести изменения, соответствующие использованию грамматической конструкции Do While … loop. Убедиться в правильности функционирования.

ПРОГРАММНЫЙ МОДУЛЬ VBA ПЕРВОГО ОБЪЕКТА CommandButton1 СКОПИРОВАТЬ В МОДУЛЬ ВТОРОГО ОБЪЕКТА CommandButton2.

Внести изменения, соответствующие использованию грамматической конструкции Do Loop … while. Убедиться в правильности функционирования.

Последовательно повторить эти операции для всех видов операторов цикла, т. е. до конструкции For Each … next включительно.

ПрограммытабулированияразветвляющейсяфункциивVВА с использованием операторов цикла

Private Sub CommandButton1_Click() Dim i As Integer

Dim j As Integer

Dim x As Double

Dim w As String

w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")

If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 1), Cells(28, 3)) = Clear

xn = InputBox("xn =", "Введите начало диапазона", -3)

40

41

xk = InputBox("xk =", "Введите конец диапазона", 7)

xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)

i= InputBox("i =", "Введите начало таблицы, строку", 7)

j= InputBox("j =", "Введите начало таблицы, столбец", 1) Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"

i= i + 1

x= xn

Do While x <= xk

Cells(i, j) = Format(x, "0.0#") If x <= 0 Then

Cells(i, j + 1) = Format(g(x), "#0.0###") Else

Cells(i, j + 2) = Format(g(x), "#0.0###") End If

x= x + xd: i = i + 1 Loop

End Sub

Private Sub CommandButton2_Click() Dim i As Integer

Dim j As Integer

Dim x As Double

w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")

If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 4), Cells(28, 6)) = Clear

xn = InputBox("xn =", "Введите начало диапазона", -3) xk = InputBox("xk =", "Введите конец диапазона", 7)

xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)

i= InputBox("i =", "Введите начало таблицы, строку", 7)

j= InputBox("j =", "Введите начало таблицы, столбец", 4) Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"

i= i + 1

x= xn Do

Cells(i, j) = Format(x, "0.0#") If x <= 0 Then

Cells(i, j + 1) = Format(g(x), "#0.0###") Else

Cells(i, j + 2) = Format(g(x), "#0.0###") End If

x= x + xd: i = i + 1

42

Loop While x <= xk

End Sub

Private Sub CommandButton3_Click() Dim i As Integer

Dim j As Integer

Dim x As Double

Dim w As String

w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")

If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 7), Cells(28, 9)) = Clear

w = InputBox("w =", "очистить диапазон? - Y/N")

If w = "Y" Then Range(Columns(1), Rows(15)) = Clear xn = InputBox("xn =", "Введите начало диапазона", -3) xk = InputBox("xk =", "Введите конец диапазона", 7)

xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5) i = InputBox("i =", "Введите начало таблицы, строку", 7)

j = InputBox("j =", "Введите начало таблицы, столбец", 7) Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2" i = i + 1

x = xn

Do Until x > xk

Cells(i, j) = Format(x, "0.0#") If x <= 0 Then

Cells(i, j + 1) = Format(g(x), "#0.0###") Else

Cells(i, j + 2) = Format(g(x), "#0.0###") End If

x = x + xd: i = i + 1 Loop

End Sub

Private Sub CommandButton4_Click() Dim i As Integer

Dim j As Integer

Dim x As Double

Dim w As String

w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")

If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 10), Cells(28, 12)) = Clear

xn = InputBox("xn =", "Введите начало диапазона", -3)

43

xk = InputBox("xk =", "Введите конец диапазона", 7)

xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)

i= InputBox("i =", "Введите начало таблицы, строку", 7)

j= InputBox("j =", "Введите начало таблицы, столбец", 10) Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"

i= i + 1

x= xn Do

Cells(i, j) = Format(x, "0.0#") If x <= 0 Then

Cells(i, j + 1) = Format(g(x), "#0.0###") Else

Cells(i, j + 2) = Format(g(x), "#0.0###") End If

x= x + xd: i = i + 1 Loop Until x > xk End Sub

Private Sub CommandButton5_Click() Dim i As Integer

Dim j As Integer

Dim x As Double

Dim w As String

w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")

If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 13), Cells(28, 15)) = Clear

xn = InputBox("xn =", "Введите начало диапазона", -3) xk = InputBox("xk =", "Введите конец диапазона", 7)

xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)

i= InputBox("i =", "Введите начало таблицы, строку", 7)

j= InputBox("j =", "Введите начало таблицы, столбец", 13) Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"

i= i + 1

x= xn

While x <= xk

Cells(i, j) = Format(x, "0.0#") If x <= 0 Then

Cells(i, j + 1) = Format(g(x), "#0.0###") Else

Cells(i, j + 2) = Format(g(x), "#0.0###") End If

44

x = x + xd: i = i + 1 Wend

End Sub

Private Sub CommandButton6_Click() Dim i As Integer

Dim j As Integer

Dim x As Double

Dim w As String

w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")

If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 16), Cells(28, 18)) = Clear

xn = InputBox("xn =", "Введите начало диапазона", -3) xk = InputBox("xk =", "Введите конец диапазона", 7)

xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5) i = InputBox("i =", "Введите начало таблицы, строку", 7)

j = InputBox("j =", "Введите начало таблицы, столбец", 16) Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"

i = i + 1

For x = xn To xk Step xd Cells(i, j) = Format(x, "0.0#") If x <= 0 Then

Cells(i, j + 1) = Format(g(x), "#0.0###") Else

Cells(i, j + 2) = Format(g(x), "#0.0###") End If

i = i + 1 Next x End Sub

Private Sub CommandButton7_Click() Dim i As Integer

Dim j As Integer

Dim k As Integer Dim x() As Double Dim y() As Double Dim w As String

w = InputBox("w =", "очистить диапазон? - (Y,y,Д,д)/N")

If (w = "Y") Or (w = "y") Or (w = "Д") Or (w = "д") Then Range(Cells(7, 19), Cells(28, 21)) = Clear

‘If w = "Y" Then Range(Columns(1), Rows(19)) = Clear

45

xn = InputBox("xn =", "Введите начало диапазона", -3) xk = InputBox("xk =", "Введите конец диапазона", 7)

xd = InputBox("xd =", "Введите шаг изменения переменной", 0.5)

i= InputBox("i =", "Введите начало таблицы, строку", 7)

j= InputBox("j =", "Введите начало таблицы, столбец", 19) Cells(i, j) = "X": Cells(i, j + 1) = "G1": Cells(i, j + 2) = "G2"

i= i + 1 i0 = i

ReDim x((xk - xn) / xd) ReDim y((xk - xn) / xd) For k = 0 To (xk - xn) / xd x(k) = xn + k * xd

y(k) = g(x(k)) Next k

For Each n In x

Cells(i, j) = Format(n, "0.0#")

i= i + 1 Next n

i= i0

k= 0

For Each n In y

If x(k) <= 0 Then Cells(i, j + 1) = Format(n, "#0.0###") Else Cells(i, j + 2) = Format(n, "#0.0###")

i = i + 1 k = k + 1 Next n End Sub

Некоторые комментарии к программам:

в программах используется специально созданная пользовательская функция g(x).

Процесс создания функции пользователя следующий:находясь в Excel, включить редактор VBA, нажав ALT-F11;включить режим вставки (insert);

выбрать Module;

в появившемся окне написать текст модуля, соответствующий программируемой функции –

Function g(x)

If x <= 0 Then g = Sin(x) Else g = Exp(-x)

End Function

46

нажать пиктограмму – Run Sub/UserForm;

в появившемся окне Macros щелкнуть по клавише Cancel, что обеспечивает внесение функции g(x) в библиотеку модулей мастера функций fx; с этого момента функция g(x) доступна всем пользователям мастера функций fx в разделах «Полный алфавитный перечень» либо «Определенные пользователем».

ИМЕНА ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ НЕ ДОЛЖНЫ СОВПАДАТЬ С АДРЕСАМИ ЯЧЕЕК ТАБЛИЦЫ EXCEL.

Впрограммах используется функция Format(x, "0.0#”), которая обеспечивает вывод указанной переменной, в данном случае X, в заданном формате «0.0#», в данном случае один разряд до десятичной точки, два – после.

Вмодуле с оператором For Each … next используется динамическое объявление массивов

Dim x() As Double

Dim y() As Double

с последующим уточнением мерности массивов

ReDim x((xk - xn) / xd)

ReDim y((xk - xn) / xd)

которое может размещаться в любом месте программы.

Так как оператор цикла For Each … next может оперировать только с элементами одного множества, то для вывода спектров значений аргумента X и функции g(x) используются два разных оператора

For Each n In x

Next n

и

For Each n In y

Next n.

47

8. ИГРА «УГАДАЙ ЧИСЛО»

Целью лабораторной работы является приобретение навыков практического использования функций RND (Randomize) – для генерирования случайных чисел в заданном диапазоне; Round – округление; Cstr для выполнения операции сцепления (конкатенации) символьных данных.

Сценарий, алгоритмигрыследующий: программа«загадывает» целое (для простоты) число в заданном диапазоне и на предлагаемые играющим варианты ответов сообщает – больше или меньше «загаданное» ею число, считая при этом количество попыток. Выводимая информация – диалог программы с игроком – определяется программистом (рис. 8.1).

Программа игры в VВА

Private Sub CommandButton1_Click() Dim L, a, x As Integer

Range(Cells(5, 1), Cells(25, 7)) = Clear

d = InputBox("D =", "Введите диапазон игры")

Cells(5, 2) = "Нучтож, играем, угадайчислоX вдиапазонеот0 до" + CStr(d) Randomize

x = Round(d * Rnd()) L = 0: i = 10: j = 2

10 a = InputBox("x =", "Введите ваш вариант") L = L + 1: i = i + 1

If x > a Then

Cells(i, j) = "Загаданное число X больше вашего числа " + CStr(a) GoTo 10

End If

If x < a Then

Cells(i, j) = "Загаданное число X меньше вашего числа " + CStr(a) GoTo 10

End If

If x = a Then

Cells(i, j) = "Да, эточисло" + CStr(a) + ", Угадал, за" + CStr(L) + " попыток" Cells(1, 1).Select

Exit Sub

End If

End Sub

48

Рис. 8.1 Рис. 8.1

Ну что ж,

49

Некоторые комментарии к программе:

в программе реализована только основа алгоритма;можнодобавитьнижнююграницудиапазона; выполнитьтре-

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

9. ПОЛЬЗОВАТЕЛЬСКИЕ ФОРМЫ

Целью лабораторной работы является приобретение навыков практического использования объектов Userform, Textbox, Label,

CheckBox, OptionButton и других.

Рекомендуется созданные пользовательские формы объединять и активизировать с помощью кнопочного меню (рис. 9.1, 9.2).

Рис. 9.1

Рис. 9.2

Каждая кнопка меню обеспечивает вызов соответствующего объекта Userform, например:

Private Sub CommandButton2_Click()

UserForm1.Show

End Sub

Кнопка 2 вызывает калькулятор 1, использующий для выбора арифметических операций объекты OptionButton (рис. 9.3).

50

51

пять объектов OptionButton;

два объекта CommandButton,

расположив их, как показано на рис. 9.3.

Если будут использоваться объекты Frame (рамка) (см. рис. 9.3), два из которых переименованы в «Исходные данные» и «Арифметические действия», то необходимо помнить правило:

Объекты помещаются в Frame, а не Frame «одевается» на объекты!

Далее открыть модуль, программно поддерживающий объект CommandButton1 (в свойстве Caption переименованный в «Вычислить») объекта UserForm, и написать программу, обеспечивающую организацию взаимодействия выбранных объектов для получения результатов при выбранных арифметических операциях.

Рис. 9.3

 

9.1. Калькулятор с OptionButton

 

Создание пользовательской формы организуется следующим

 

образом:

 

войти в VBA Alt-F11;

 

выбрать Insert (вставка);

 

выбрать UserForm.

 

Затем на появившуюся «платформу» объекта UserForm с пане-

 

ли Toolbox (рис. 9.4) последовательно переместить:

 

три объекта Label;

 

три объекта Textbox;

Рис. 9.4

52

53

Программа калькулятора с OptionButton

Private Sub CommandButton1_Click()

If Not IsNumeric(TextBox1) Or Not IsNumeric(TextBox2) Then

MsgBox "Исходныеданныевведеныневерноилинеполностью!", , "Введите числа"

Exit Sub

End If

A = CDbl(TextBox1)

B = CDbl(TextBox2)

If OptionButton1 = True Then TextBox3 = A + B

If OptionButton2 = True Then TextBox3 = A - B If OptionButton3 = True Then

If B <> 0 Then TextBox3 = A / B Else TextBox3 = "На ноль не делим!" End If

If OptionButton4 = True Then TextBox3 = A * B If OptionButton5 = True Then

If (A = 0) And (B <= 0) Then TextBox3 = "Недопустимые значения!" Else TextBox3 = A ^ B

End If

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Некоторые комментарии к программе:

в программе используется функция IsNumeric(TextBox1), проверяющая, являются ли данные, помещенные в объекте TextBox1 или TextBox2, цифровыми;

в программе используется функция CDbl(TextBox), обеспечивающая преобразование данных объектов TextBox1 и TextBox2 в цифровые;

в программе обрабатывается ситуация невозможности деления на ноль;

в программе обрабатывается ситуация невозможности возведения нуля в нулевую степень;

модуль объекта CommandButton2, который в свойстве Caption переименованв«Выход», обеспечиваетзавершениефункционирования объекта UserForm.

54

9.2. Калькулятор с CheckBox

Создание пользовательской формы организуется следующим образом:

войти в VBA Alt-F11;

выбрать Insert (вставка);

выбрать UserForm.

Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:

два объекта Label;семь объектов Textbox;пять объектов CheckBox;четыре объекта Frame;

два объекта CommandButton,

расположив их, как показано на рис. 9.5.

Рис. 9.5

55

В объекте UserForm используются четыре объекта Frame (рамка) (см. рис. 9.5), три из которых переименованы в «Исходные данные», «Результаты» и «Арифметические действия».

Далее открыть модуль, программно поддерживающий объект CommandButton1 (в свойстве Caption переименованный в «Вычислить») объекта UserForm, и написать программу, обеспечивающую организацию взаимодействия выбранных объектов для получения результатов при выбранных арифметических операциях.

Программа калькулятора с CheckBox

Private Sub CommandButton1_Click()

If Not IsNumeric(TextBox1) Or Not IsNumeric(TextBox2) Then

MsgBox "Исходныеданныевведеныневерноилинеполностью!", , "Введите числа"

Exit Sub

End If

A = CDbl(TextBox1)

B = CDbl(TextBox2)

If CheckBox1 = True Then TextBox3 = A + B Else TextBox3 = "" If CheckBox2 = True Then TextBox4 = A - B Else TextBox4 = "" If CheckBox4 = True Then

If B <> 0 Then TextBox6 = A / B Else TextBox6 = "На ноль не делим!" Else TextBox6 = ""

End If

If CheckBox3 = True Then TextBox5 = A * B Else TextBox5 = "" If CheckBox5 = True Then

If A = 0 And B <= 0 Then TextBox7 = "Недопустимые значения!" Else TextBox7 = A ^ B

Else TextBox7 = "" End If

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Некоторые комментарии к программе:

калькулятор с CheckBox, в отличие от калькулятора с OptionButton, позволяет вывести одновременно результаты вычисле-

ний всех или части выбранных операций, для чего используются пять объектов TextBox;

впрограммеиспользуетсяфункцияIsNumeric(TextBox), проверяющая, являются ли данные, помещенные в объекте TextBox1 или TextBox2, цифровыми;

в программе используется функция CDbl(TextBox), обеспечивающая преобразование данных объектов TextBox1 и TextBox2 в цифровые;

в программе обрабатывается ситуация невозможности деления на ноль;

в программе обрабатывается ситуация невозможности возведения нуля в нулевую степень;

в программе обеспечивается ситуация вывода пустого окна в случае, если какой-либо CheckBox не выбран;

модуль объекта CommandButton2, который в свойстве Caption переименован в «Выход», обеспечивает завершение функционирования объекта UserForm.

9.3. Логарифмический калькулятор

Создание пользовательской формы организуется следующим образом:

войти в VBA Alt-F11;

выбрать Insert (вставка);

выбрать UserForm.

Затем на появившуюся «платформу» объекта UserForm с панели Toolbox (см. рис. 9.4) последовательно переместить:

два объекта Label;пять объектов Textbox;три объекта CheckBox;четыре объекта Frame;

два объекта CommandButton,

расположив их, как показано на рис. 9.6.

В объекте UserForm используются четыре объекта Frame (рамка) (см. рис. 9.6), три из которых переименованы в «Исходные данные», «Результаты» и «Действия».

56

57

Рис. 9.6

Далее открыть модуль, программно поддерживающий объект CommandButton1 (в свойстве Caption переименованный в «Вычислить») объекта UserForm, и написать программу, обеспечивающую организацию взаимодействия выбранных объектов для получения результатов при выбранных математических операциях.

Программа логарифмического калькулятора

Private Sub CommandButton1_Click()

If Not IsNumeric(TextBox1) Or Not IsNumeric(TextBox2) Then

MsgBox "Исходныеданныевведеныневерноилинеполностью!", , "Введите

числа"

58

Exit Sub

End If

A = CDbl(TextBox1)

B = CDbl(TextBox2)

If CheckBox1 = True Then

If B > 0And B <> 1AndA> 0 Then TextBox3 =Application.WorksheetFunction. Log(A, B) Else TextBox3 = "Недопустимые значения!"

Else TextBox3 = "" End If

If CheckBox2 = True Then

If A > 0 Then TextBox4 = Application.WorksheetFunction.Log10(A) Else TextBox4 = "Недопустимые значения!"

Else TextBox4 = "" End If

If CheckBox3 = True Then

If A > 0 Then TextBox5 = Application.WorksheetFunction.Ln(A) Else TextBox5 = "Недопустимые значения!"

Else TextBox5 = "" End If

End Sub

Private Sub CommandButton2_Click()

Unload Me

End Sub

Некоторые комментарии к программе:

логарифмический калькулятор с CheckBox позволяет вывести одновременно результаты вычислений трех видов логарифмов или некоторых, для чего используются три объекта TextBox;

в программе используется функция IsNumeric(TextBox1), проверяющая, являются ли данные, помещенные в объекте TextBox1 или TextBox2, цифровыми;

в программе используется функция CDbl(TextBox), обеспечивающая преобразование данных объектов TextBox1 и TextBox2 в цифровые;

в программе обрабатывается ситуация невозможности вычисления логарифмов от отрицательного числа или числа, равного нулю;

в программе обеспечивается ситуация вывода пустого окна в случае, если какой-либо CheckBox не выбран;

59