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

Теоретические и практические вопросы дисциплины «Информатика». Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
101
45=90 имеет значение Ложь (F0), но результат функции Not будет
x
x
e
x
b
a
x
x
e
ba
Z
sin
1
cos
, если x < 2.3
, если 2.3 ≤ x ≤ 5
, если x > 5
Public Sub Fun_z()
1
′ Программа для вычисления сложной функции
2
Истина (T0),. Поскольку результат проверяемого условия Истина, оператор if передаст управление на строку 9, в которой будет вычислен тангенс 45 градусов, и результат вычисления (число 1) запишется в ячейку y. Инструкция MsgBox выводит результат в окно
Windows, и управление передается на строку 13, в которой оператор Gotо передает управление на метку m1, т.е. в строку 7.
Если ввести недопустимое значение угла (900), то при проверке
условия 90=90 значение проверяемого условия будет Истина (T0). Это значение меняется на Ложь (F0), поскольку использована функция Not. В результате управление будет передано на строку 11, в которой инструкция MsgBox создает окно с сообщением «Неверный ввод. Повторите ввод» и затем управление будет передано на строку 13, а из нее в строку 7.
Поскольку программа замкнутая, прерывание программы
возможно только при нажатии на клавиши Ctrl-Break. Задача 25. Вычислить значение cложной функции Z:
где a = 2,7 b = -0,27 x = 3,76
Отдельные выражения сложной функции Z оформить как
процедуры-функции. Реализация программы на VBA:
Переименуем "Лист1" в лист "Prog22". Переименуем ячейки Excel b8, b9, b10 соответственно в ячейки _a, _b, _x и введем туда числовые значения. Создадим процедуру типа Sub с именем Fun_z и запишем в нее код разработанной программы:
102
′ Программист−студент гр. 6131-11 Сапунов М.Ю.
3
′ Дата разработки программы − 21.10.13
4
′ Имя файла программы Log_4.xls
5
With Worksheets( "Prog22" )
6
a= .Range("_a").Value
7
b= .Range("_b").Value
8
x = .Range("_x").Value
9
End With
10
IF x < 2.3 Then
11
y=f1(a, b, x)
12
Elseif x= > 2.3 And x <= 5 Then
13
y=f2(a, b, x)
14
Else
15
y= f3(a, b, x)
16
End If
17
MsgBox "y="y, , "Вывод результата"
18
End Sub
19
Запишем отдельные выражения сложной функции Z в
Public Function f1(a, b, x)
20
′ Модуль для вычисления первого выражения
21
f1= (a+b)/(exp(x)+cos(x)
22
End Function
23
Public Function f2(a, b, x)
24
′ Модуль для вычисления второго выражения
25
f2= a+b/(x+1)
26
End Function
27
Public Function f3(a, b, x)
28
′ Модуль для вычисления третьего выражения
29
f3= exp(x)+sin(x)
30
End Function
31
процедуры типа Function:
Первая процедура Function:
Вторая процедура Function:
Третья процедура Function:
103
Перед запуском программы в клетки B8, B9, B10 вводятся соответственно числа 2,7; -0,27; 3,76. Затем ячейкам с числами присваиваются соответственно имена: _a; _b; _x. Для присвоения имен используем меню Excel: Вставка =>Имя=>Присвоить и далее в поле имя вводят уникальное имя клетки, не совпадающее ни с каким объектом Excel, например имена: _a; _b; _x.
После запуска программы исходные данные автоматически вводятся из ячеек B8, B9, B10 листа Excel и присваиваются переменным a, b, x VBA (строки 7-9).
Для сокращения записей в программе использован оператор With…End With (строки 6-10). В строке 11 проверяется первое условие. Если значение условия – Истина, выполняется переход на строку 12, в которой записано обращение к процедуре-функции с именем f1, куда и передаются заданные параметры. После выполнения процедуры Function результат присваивается переменной y, и управление передается в строку 18. Если значение проверяемого условия Ложь, то ищутся другие условия, записанные после ElseIf. Такое условие имеется в строке 13. Это условие сложное и состоит из двух простых условий, соединенных логической функцией And.
Результатом логической функции And будет Истина, только в том случае, если значение обоих простых условий Истина, и тогда выполнится строка 14, т.е. произойдет вызов второй процедуры­функции. После выполнения процедуры F результат будет присвоен переменной y, записанной в 14 строке. Затем управление передается в строку 18.
Если же оба условия (простое, записанное в строке 11, и сложное, записанное в строке 13) будут иметь значение Ложь, тогда компьютер выполнит без проверки каких-либо условий строку 16, в которой исходные данные будут переданы третьей процедуре Function. Результат расчетов будет присвоен переменной y, записанной в 16 строке, и управление будет передано в строку 18.
В 18 строке инструкция MsgBox выведет результат в окно
Windows.
104
Задача 25. Вычислить значение переменной Y. Вычисляемые
 
 
axe
xa
Y
ax
cos
sin
, если x < 2 и a<3
, если 2≤x<5 или 3≤a<10 , в остальных случаях
выражения записать в отдельные модули типа Function.
где a = 2,7 b = -0,27 x = 3,76. Данные в программу ввести из окна Windows.
Результат вычислений вывести в заданную ячейку Excel, например в 11 строку и второй столбец.
Для составления программы необходимо познакомиться с инструкцией, позволяющей выводить результат в любую ячейку Excel.
Организация вывода данных в ячейку Excel
Формат данной инструкции:
Worksheets ("Имя_листа"). Сells(строка, столбец) = переменная
Имя_листа – имя листа Excel, в который будет выводиться
значение переменной; строка − номер строки, в которую выводится значение переменной; столбeц − номер столбца, в который выводится значение переменной, причем А –это первый столбец Excel, B – второй столбец и т.д. Вся таблица Excel рассматривается, таким образом как одна большая матрица, и результат может быть выведен в любую ячейку Excel; переменная − переменная, значение которой будет выведено в заданную ячейку листа Excel.
Аналогичная конструкция позволяет присваивать переменной числовое значение, записанное в заданной ячейке Excel.
Организация ввода данных из ячейки Excel
Формат этой конструкции:
переменная=Worksheets ("Имя_листа"). Сells(строка, столбец).Value
Загрузим Microsoft Excel и создадим таблицу на листе с именем "Prog25", в который запишем шапку программы, подсказки для переменных, значения исходных переменных, а также запомним их координаты и координаты ячейки, в которую необходимо вывести результат.
105
Как видно из таблицы, результат должен быть записан в ячейку
Public Sub Fun_y()
1
a=Worksheets("Prog25").Cells(7.2).Value
2
b=Worksheets("Prog25").Cells(8.2).Value
3
x=Worksheets("Prog25").Cells(9.2).Value
4
If x <2 And a<3 THEN
5
y=f1(a, b, x)
6
ElseIf (x >=2 And x< 5) Or (a >=3 And a< 10) Then
7
y= f2(a, b, x)
8
Else
9
y= f3(a, b, x)
10
End If
11
Worksheets("Prog25").Сells(11,2) = y
12
End Sub
13
Public Function f1(a, b,x)
14
′ Модуль для вычисления первого выражения
15
f1= a* Sin(x)
16
с координатами (индексами) (11;2); исходные данные записаны в ячейках с координатами (7;2),(8;2),(9;2):
Реализация программы на VBA: Процедура типа Sub:
Запишем отдельные выражения сложной функции Y в процедуры типа
Function: Первая процедура типа Function:
106
End Function
17
Вторая процедура типа Function:
Public Function f2(a, b,x)
18
′ Модуль для вычисления второго выражения
19
f2= Exp(a*x)
20
End Function
21
Public Function f3(a, b,x)
22
′ Модуль для вычисления второго выражения
23
f3= Cos(a*x)
24
End Function
25
1
-начало процедуры Sub, имеющей имя Fun_y;
2-4
-чтение заданных значений из листа Excel с именем Prog25 и
присвоение числовых значений соответствующим переменным a,b,x;
5
- начало блока If, проверка двух первых простых условий,
соединенных логической функцией And. Результат проверки Истина в том случае, если оба простых проверяемых условия истины. В этом случае происходит передача управления на строку 6. Если результат проверки Ложь, то осуществляется поиск других условий, которые могут быть, если имеется строки с ключевым словом ElseIf (строка 7);
6
-осуществляется вызов первой процедуры типа Function, в которую передаются значения переменных a,b,x;
7
-проверяется два сложных условия соединенных логической
функцией Or. Результат проверки Истина, если результат хотя бы одного проверяемого сложного условия Истина;
8
-осуществляется вызов второй процедуры типа Function (если
результат проверки сложного условия в строке 7 − Истина), в которую передаются значения переменных a,b,x;
9
- записано ключевое слово Else;
10
- осуществляется вызов третьей процедуры Function (если оба
проверяемых условия в строках 5 и 7 имеют значение Ложь). Туда же передаются значения переменных a,b,x;
11
-конец оператора If;
Третья процедура типа Function:
Обсуждение программы:
107
12
- записанная инструкция позволяет записать значение
переменной y в ячейку листа с именем Prog25. Значение y записывается в ячейку с координатами 11,2 (11 строка, второй столбец таблицы Excel);
13
- записан конец процедуры Sub.
3.8 Циклические вычислительные процессы
В циклических программах заданная группа операторов выполняется какое-то (обычно известное) число раз. В таких программах часто используют арифметический цикл For… Next.
Оператор For...Next
(For ... Next − для ... следующий)
Формат оператора:
For переменная_цикла = нзп To кзп [ Step шаг ]
[группа операторов]
Next [ переменная_цикла ] [ , переменная_цикла ]
переменная_цикла (параметр цикла) используется в качестве счетчика цикла; нзп, кзп, шаг − константы или числовые выражения, задающие соответственно начальное, конечное значения и шаг (величину изменения) переменной цикла. В операторе цикла часть структуры оператора, записанную в квадратных скобках, можно не указывать и тогда значение параметра шаг будет равно единице.
Оператор реализует циклическое выполнение группы операторов, расположенных между операторами For и Next. Оператор Next изменяет переменную цикла на величину шага. Если значение переменной цикла не превышает или равно конечному значению (кзп), то управление передается оператору непосредственно следующему за оператором For. Если значение переменной цикла превышает кзп, то управление передается оператору, следующему за оператором Next.
Рассмотрим простейшую программу с использованием оператора цикла:
For i=0 To 10 Step 5 : MsgBox "A",, "Вывод" : Next i
- выводится 3 раза буква А, так как переменная цикла (i) принимает значения: 0; 5; 10.
В операторе Next переменную цикла можно не указывать, но для
понимания программы еe лучше написать, хотя это немного замедляет
108
процесс вычислений. Использование ц е л о й переменной цикла в операторе For ускоряет процесс вычислений. Если имеются вложенные циклы, то в операторе Next сначала записывается
параметр внутреннего цикла, а затем внешнего.
3.9 Типы данных переменных и констант и область их
видимости
Тип данных – это термин, описывающий природу данных, таких как числа, текст, даты, которые VBA умеет различать и по-разному хранить в своей памяти.
В ранее составленных программах тип данных не использовался, что существенно упрощало написание кода программы. VBA присваивал автоматически всем данным тип Va r i a n t и выполнял программу. Однако такой подход не позволяет создать оптимальные по размеру программы.
Приведем некоторые типы данных VBA:
- I n t e g e r − признак целой переменной или константы одинарной
точности. Целая переменная занимает 2 байта и записывается в памяти компьютера точно. Компьютер производит вычисления с целыми числами абсолютно точно (без погрешностей).
Целое число − это число без дробной части, например, 1; 32;
466. Число 1,0 VBA рассматривает как нецелое, несмотря на то, что его дробная часть равна нулю
Диапазон чисел, которые могут быть записаны с этим типом
данных от -32768 до +32767;
- L o n g − признак целой переменной двойной точности. Такая
переменная занимает 4 байта. Диапазон таких чисел намного больше диапазона переменной одинарной точности: от -2147483648 до
2147483647.
Целые числа занимают меньше памяти, а операции над целыми
числами выполняются намного быстрее, чем с числами с плавающей запятой.
- S i n g l e - признак вещественной переменной (константы)
одинарной точности. Такая переменная занимает 4 ячейки памяти и записывается в памяти с определенной погрешностью (с точностью до 8 знаков после запятой). Числа 15,456, -10,125 – это числа с плавающей запятой типа S i n g l e . Такие числа имеют диапазон значений для отрицательных чисел от -1,4·1045 до -3,4·10 положительных от 3,4·1038 до 1,4·1045;
38
, а для
109
- D o u b l e - признак вещественной переменной двойной точности;
Такая переменная занимает 8 ячеек памяти и записывается в памяти с определенной погрешностью (с точностью до 16 знаков после запятой). Кроме того, диапазон таких чисел намного больше диапазона чисел одинарной точности: для отрицательных чисел от-4,9·10 1,79·10
308
, а для положительных от 1,79·10
Арифметические операции над числами с плавающей запятой
308
до 4,9·10
324
;
324
до -
выполняются медленнее, чем над целыми числами и над ними проводятся операции округления. Маленькие или большие числа с плавающей запятой выводятся в экспоненциальной форме: m·E p или m·D p , то есть в форме m 10p.
- S t r i n g − признак строковой переменной или константы. Строки
в VBA заключаются в кавычки, например "Вывод данных", или "125.23" Большинство данных выводимых в диалоговых окнах имеют тип данных String.
- B o ole a n –тип данных, которые принимают только два значения
True или False. Данные такого вида называют также б у л е в ы м и . Используются для хранения результатов проверки условий. Данные типа Boolean требуют двух байтов памяти. При выводе данных типа Boolean на экран, VBA автоматически преобразует их в строку, содержащую слово True или False.
- V a r i a n t – это специальный тип данных, в котором можно хранить
все типы данных перечисленных ранее. VBA использует этот тип, когда тип переменной или константы не указан пользователем.
Оператор Dim для явного описания типа данных
(DIMension – размерность)
Формат оператора:
Dim имя_переменной [As тип [, имя_переменной As тип ]] …
- оператор объявления простой переменной и установления ее типа,
где имя_переменной – имя используемой переменной; тип – заданный тип данных.
Приведем примеры объявления переменной:
Dim Hello
- объявлена переменная Hello без указания ее типа, которая
может быть использована для вывода текста в окне Windows.
Dim Hello As String
110
- объявлена переменная Hello, типа строковой, которая может
быть использована для вывода текста в окне.
Под областью видимости переменной (идентификатора) имеют в виду процедуру или модуль в которых доступен данный идентификатор.
Идентификаторы, объявленные в некоторой процедуре, доступны только внутри этой процедуры. Про такой идентификатор говорят, что область его видимости − процедура.
Если в том же модуле существует вторая процедура, в которой объявлена переменная с таким же именем, что и в первой процедуре, то в модуле имеются две различные локальные переменные, например в модуле содержатся две процедуры:
Private Sub HelloWod_1
Dim Hello As String
Hello = "Привет Коля!"
MsgBox Hello
End Sub
Private Sub HelloWod_2
Dim Hello As String
Hello = "Привет Витя!"
MsgBox Hello
End Sub
Внутри каждой процедуры объявлена переменная Hello строкового типа. Такая переменная является локальной, и область ее видимости – процедура, в которой она объявлена.
Если необходимо, чтобы одна переменная была доступна нескольким процедурам, то ее надо объявить в самом начале модуля перед объявлением всех процедур:
Dim Hello As String
Private Sub Hello_1
Hello = "Привет Коля!"
MsgBox Hello
End Sub
Private Sub Hello_2
Hello = "Привет Витя!"
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]