End Sub
[Область видимости] – указывают Public, если процедура глобальная и доступна (видна) из других модулей, либо Private, если процедура локальная и доступна (видна) только внутри данного модуля и не может быть вызвана из других модулей.
Sub – зарезервированное слово VBA объявляет начало процедуры, за ним задается имя_процедуры, в скобках указывается список параметров, передаваемых при вызове процедуры из программы (список параметров может отсутствовать).
Список_Параметров – список переменных, передаваемых процедуре при вызове ее из другой процедуры: Имя_Параметра As Тип_Данных, As – зарезервированное слово VBA указывает, что за ним следует тип переменной. [ раздел описаний (констант и переменных) ] – раздел описания констант и переменных.
Определение: к онстанта — это поименованная область памяти для хранения данных, значение которым присваивается при определении константы; значения остаются постоянными и не могут быть изменены во время выполнения программы.
Для определения констант служит зарезервированное слово Const.
Синтаксис описания констант:
Const Имя_Константы As Тип= значение
Например:
' Объявлена числовая константа для хранения
' значения числа Pi
Const Pi As Single = 3.1415926
где Const (Константа) — зарезервированное слово, которое сообщает VBA, что декларируется константа и резервируется область памяти для ее хранения; Имя_Константы — имя константы, не входящее в перечень зарезервированных слов VBA; As (Как) — зарезервированное слово, которое сообщает VBA, что определяется тип данных константы; Тип — Тип_константы определяет размер памяти занимаемой константой (прил. 2, п.1.6, табл. 4). При наборе программы в среда редактора VBA после набора зарезервированного слова As раскрывается список типов объектов и базовые Типы_Дынных. Выбранный в списке Тип_Данных устанавливается двойным щелчком мыши, нажатием клавиши <Таb> или нажатием клавиши <Enter>.
Определение: переменная — это поименованная область памяти для хранения данных, которые могут изменяться в процессе выполнения программы.
Поскольку в VBA имеются определенные соглашения по отношению имени и типа переменной, то во избежание путаницы типов данных, переменные необходимо описывать или декларировать.
Синтаксис описания переменных:
Dim [Static] Имя_Переменной [ As Тип ]
где Dim (Определить) — зарезервированное слово, которое сообщает VBA, что декларируется переменная и резервируется область памяти для ее хранения. Имя_Переменной — имя переменной, не входящее в перечень ключевых слов VBA. As (Как) — зарезервированное слово, которое сообщает VBA, что определяется тип данных для переменной. Тип — Тип_переменной определяет размер памяти занимаемой переменной (прил. 2, п.1.6, табл. 4). Static (Статический) — зарезервированное слово VBA, позволяет сохранить значение переменной между вызовами процедуры, в которой она объявлена, инструкция Static используется только на уровне процедуры.
Тело процедуры (операторы) – алгоритм записанный на языке VBA.
End Sub – операторная скобка, указывающая на конец процедуры. Каждому оператору Sub обязательно соответствует End Sub.
Примечание: В разделе [ раздел описаний (констант и переменных) ] сначала описываются все константы, а затем все переменные. [ раздел описаний (констант и переменных) ] не является обязательным в процедурах.
Область видимости переменных и констант (три уровня):
1) До сих пор говорилось об описании констант и переменных внутри процедуры. Их также можно объявлять в верхней части модуля, которая называется областью общих объявлений. Область объявления переменных определяет область их видимости. Если переменная (константа) объявлена в процедуре, то процедура их видит и работает с ними, а другие процедуры не могут использовать эти переменные и их значения. Такие переменные называются локальными. В этом случае говорят, что переменная видна на уровне процедуры.
2) Для того, чтобы значения определенных констант и переменных были доступны всем процедурам данного модуля надо их объявить в области общих объявлений модуля (General Declarations), перед словом Dim поставить слово Private. Такие переменные и константы видимы на уровне модуля.
3) Для того, чтобы переменные и константы модуля можно было использовать в любой процедуре любого модуля данного приложения необходимо описать их как глобальные. Нужно помнить, что они находятся в оперативной памяти все время выполнения приложения и, следовательно потребляют системные ресурсы. Глобальные переменные объявляются в области общих объявлений модуля, перед словом Dim ставится слово Public.
Аналогично описываются в области общих объявления модуля константы:
[Public|Private] Const Имя_Константы As Тип= значение
Но если в верхней части окна модуля есть оператор Option Explicit, то необходимо описать все переменные и константы.
Инструкция Option Explicit в секции General находится в модуле до всех процедур.При использовании инструкции Option Explicit необходимо явно описать все переменные с помощью инструкций Dim, Private, Public, ReDim или Static. При попытке использовать неописанное имя переменной возникает ошибка во время компиляции
Процедуры обработки событий (Процедура_Событие)
Событие (event) – это действие над объектом (например: нажатие командной кнопки, выполнение директивы меню, открытие или закрытие таблицы Excel и т.п.) Имя Процедуры_Событи состоит из имени объекта и действия (События), которые объединяются символом подчеркивания “_”.
Синтаксис Процедуры_События:
Private Sub ИмяОбъекта_Событие ()
тело процедуры (операторы)
End Sub
Общее между общей процедурой и Процедурой_Событием зарезервированное слово Sub. Принципиальное отличие общей процедуры от Процедуры_События заключается в том, что для общей процедуры имя подбирает пользователь, а для Процедуры_Событием имя создаётся средой VBA.
Задача 1(линейный алгоритм). Найти площадь и периметр параллелограмма, у которого заданы стороны a,b и высота h. Составить программу. (рис.2)
Решение
Этап 1. Математическая часть
Дано: сторона a=6, сторона b=5 и высота h=3.
Найти: S-? P-?
S = ah;
P = 2(a + b).
(!) Самостоятельно разработать алгоритм на естественном языке и составить блок-схему.
Этап 2. Ввод данных в таблицу Excel
В ячейку А1 вводится значение стороны a, в ячейку B1 вводится значение стороны b, в ячейку C1 вводится значение высоты h.
Этап 3. Определение переменных
Вводятся: a, b, h (тип Single)
Выводятся (результат): S, P (тип Single).
Этап 4. Написание процедуры
На рабочем листе Лист1 при помощи Элементов управления создать элемент Кнопка (СommandBatton1).
Примечание: Если Панель инструментов Элементы управления отсутствует, необходимо навести курсор мыши на свободное место в строке Панели инструментов Правой Клавишей Мыши (ПКМ) вызвать меню и выбрать пункт Элементы управления.
Навести курсор мыши на Кнопку в режиме конструктора (на панели Элементы управления нажата первая кнопка (линейка с треугольником)). Вызвать контекстное меню ПКМ Выбрать пункт Свойства ® закладку Alpabetic, в списке свойств выбрать Caption, справа в поле ввода удалить старое название и ввести новое название кнопки Кнопка1.
Навести курсор на Кнопку в режиме конструктора. Вызвать контекстное меню ПКМ. Выбрать пункт Исходный текст. Автоматически попадаем в режим редактора VBA и появляется заголовок Процедуры-События:
Набирать процедуру на месте курсора:
Private Sub CommandBatton1_Click()
Dim a, b, h As Single
Dim S, P As Single
’Ввод данных
a = Range(“A1”).Value
b = Range(“B1”).Value
h = Range(“C1”).Value
’Вычисление
S = a * h
P = 2 * (a + b)
’Вывод результатов в ячейки B4 и B5
Range(“B4”).Value = “Площадь = “ & S
Range(“B5”).Value = “Периметр = “ & P
End Sub
Этап 5. Выполнение
Перейти на рабочий лист (View®Microsoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейке В4 появится результат «Площадь = 18», в В5 Þ «Периметр = 22».
Этап 6. Переименование листа Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Площадь_Периметр, нажать Enter.
Задачи для самостоятельной работы
Задача 2. Составить программу перевода значения угла αº (данного в градусах) в радианы.
Задача 3. Составить программу. Комплексное число заданное действительной и мнимой части записать в тригонометрической форме
. Примечание: , .
Задача 4. Составить программу вычисления угла (в градусах) между двумя прямыми . Примечание: .
Задача 5. Составить программу вычисления угла (в градусах) между векторами и .
Примечание: .
В VBA Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Лабораторная работа № ПР2 «Работа с условным оператором If... Then»
Цель работы: закрепить полученные в лабораторной работе № 1 навыки. Научиться работать с алгоритмом ветвления в кодах VBA.
Теоретические сведения
Условный оператор. Оператор If... Then
В VBA есть два типа операторов If... Then — линейный и блочный.
Линейный оператор If... Then используется для того, чтобы выполнить какой-либо один оператор, если некоторое условие будет истинным. Условие является выражением или функцией, истинность которого оценивается.
Синтаксическая конструкция линейного оператора:
If < Условие > Then < Оператор_1 > Else < Оператор_2 >
При значении Условия = True выполняется Оператор_1, следующий засловом Then, а затем следующий за условным оператор. Если Условие принимает значение False, то выполняется следующий за Else оператор Оператор_2. Else может отсутствовать, тогда оператор называется безальтернативным и, если Условие= True, то выполняется Оператор_1, а затем следующий за условным оператор. Если Условие= False, а выполняется следующий оператор.
Блочный оператор имеет синтаксис:
If <Условие_1> Then
<Операторы_1, если Условие=True>
[ ElseIf <Условие_2> Then
<Операторы_2, если Условие_2=True>]
[ ElseIf <Условие_3> Then
<Операторы_3, если Условие_3=False>]
…
[ Else
<Операторы>]
End If
<Условие_1> – необходимая часть оператора, это то Условие, которое должно проверяться. Если значение этого условия True, то выполняется Операторы_1 следующие за словом Then. Если необходимо проверить еще условия, то добавляется зарезервированное слово ElseIf с последующим условием. Если Условие_2= True, то выполняются Операторы_2. Если необходимы еще условия, то добавляются еще структура ElseIf и если все Условия не выполняются, то выполняются Операторы следующие за словом Else.
Операторы If могут быть вложенными друг в друга. Такое вложение операторов применяется, если нужно проверить какое-либо условие при другом условии, которое является True и включить альтернативу Else.
Задача 6 (алгоритм ветвления) Найти наибольшее из трех чисел a,b и c. Составить программу.
Решение
Этап 1. Математическая часть
Дано: три числа a, b, c.
Найти: наибольшее из трех чисел.
(!) Самостоятельно разработать алгоритм на естественном языке и составить блок-схему.
Этап 2. Ввод данных в таблицу Excel
В ячейку А1 вводится значение числа a, в ячейку B1 – значение числа b, в ячейку C1 – значение числа c.
Этап 3. Определение переменных
Вводятся: a, b, c.
Выводятся (результат): max.
Этап 4. Написание процедуры
На рабочем листе Лист1 при помощи Элементов управления создать элемент Кнопка (СommandBatton1).
Навести курсор мыши на Кнопку в режиме конструктора (на панели Элементы управления нажата первая кнопка (линейка с треугольником)). Вызвать контекстное меню ПКМ Выбрать пункт Свойства ® закладку Alpabetic, в списке свойств выбрать Caption, справа в поле ввода удалить старое название и ввести новое название кнопки Максимальное число.
Навести курсор на Кнопку в режиме конструктора. Вызвать контекстное меню ПКМ. Выбрать пункт Исходный текст. Автоматически попадаем в режим редактора VBA и появляется заголовок Процедуры-События:
Набирать процедуру на месте курсора:
Private Sub CommandButton1_Click()
Dim a, b, c As Single
Dim max As Single
’Ввод данных
a = Range("A1").Value
b = Range("B1").Value
c = Range("C1").Value
’Вычисление
If a > b And a > c Then
max = a
Else
If b > c Then
max = b
Else
max = c
End If
End If
’Вывод результатов в ячейку B4
Range("B4").Value = "Максимальное число = " & max
End Sub
Этап 5. Выполнение.
Перейти на рабочий лист (View®Microsoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейке В4 появится результат «Максимальное число = 10».
Этап 6. Переименование листа. Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Максимальное_чсило, нажать Enter.
Задачи для самостоятельной работы
Задача 7. Определить если x Î [a,b], то вычислить y=[x]. Вывести соответствующее сообщение.
Задача 8. Найти значение функции y в точке x. .
Задача 9. Числа a, b, c тогда только тогда являются сторонами треугольника, когда существуют такие положительные числа x, y, z, что
Лабораторная работа № ПР3 «Программирование циклов с параметром»
Цель работы: научиться использовать оператор VBA «Цикл с параметром» и вычислять с его помощью сумму и произведение.
Теоретические сведения
Программирование цикла с параметром
Определение. Цикл — представляет собой многократно повторяющуюся последовательность операторов. Операторы повторяются конечное число раз до выполнения условия. Циклы со счетчиком используют в тех случаях, когда необходимо выполнить некоторые действия заранее определенное число раз.
Циклысо счетчиком (с известным числом повторений) еще называют циклами For, или циклами For … Next. Синтаксис цикла For … Next таков:
For Счетчик = Начало To Конец [Step Шаг ]
Операторы
[Exit For]
[Операторы]
Next [Счетчик],
где For – зарезервированное слово VBA, обозначающее начало цикла; Счетчик– переменная, определенная в качестве счетчика цикла, при первом выполнении циклв принимает значение Начало и каждый раз при выполнении оператора Next увеличивается на величину, заданную параметром Шаг;
To – зарезервированное слово VBA, разделяющее значения Начало и Конец; Step – зарезервированное слово VBA, используемое для задания шага цикла, необязательный аргумент; Шаг – число, задающее значение, на которое увеличивается (или уменьшается) значение счетчика на каждом шаге, это число может быть отрицательным; Exit For – оператор экстренного выхода из цикла (необязательный), обычно вкладывается в оператор If…Then или Select…Case; Next – зарезервированное слово VBA, обозначающее конец цикла.
Если зарезервированное слово Step отсутствует, то значение шага равен единице.
Задача 10 (цикл с параметром). Составить программу вычисления суммы и произведения числовой последовательности. ,
Решение
Этап 1. Математическая часть
Дано: начало a и конец n суммирования и произведения.
Найти: Sum, Pr.
(!) Самостоятельно разработать алгоритм на естественном языке и составить блок-схему.
Этап 2. Ввод данных в таблицу Excel
В ячейку А1 вводится значение числа a, в ячейку B1 вводится значение числа n, в ячейку C1 вводится значение шага h для цикла.
Этап 3. Определение переменных
Вводятся: a, n, h (тип Single).
Промежуточные переменные: (счетчик цикла) i (тип Integer),(bi) b (тип Single).
Выводятся (результат): Sum, Pr (тип Single).
Этап 4. Написание процедуры
На рабочем листе Лист1 при помощи Элементов управления создать элемент Кнопка (СommandBatton1).
Навести курсор мыши на Кнопку в режиме конструктора (на панели Элементы управления нажата первая кнопка (линейка с треугольником)). Вызвать контекстное меню ПКМ Выбрать пункт Свойства ® закладку Alpabetic, в списке свойств выбрать Caption, справа в поле ввода удалить старое название и ввести новое название кнопки Сумма и Произведение.
Навести курсор на Кнопку в режиме конструктора. Вызвать контекстное меню ПКМ. Выбрать пункт Исходный текст. Автоматически попадаем в режим редактора VBA и появляется заголовок Процедуры-События:
Набирать процедуру на месте курсора:
Private Sub CommandButton1_Click()
Dim a, n, h, i As Integer
Dim Sum, Pr, b As Single
'Ввод данных
a = Range("A1").Value
n = Range("B1").Value
h = Range("C1").Value
'Вычисления
Sum = 0
Pr = 1
For i = a To n Step h
b = Sin(2 * i + 0.4)
Sum = Sum + b
Pr = Pr * b
Next i
’Вывод результатов в ячейки B4 и B5
Range("B4").Value = "Сумма = " & Sum
Range("B5").Value = "Произведение = " & Pr
End Sub
Этап 5. Выполнение
Перейти на рабочий лист (View®Microsoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейке В4 появится результат «Максимальное число = 10».
Этап 6. Переименование листа Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Сумма_Произведение, нажать Enter.
Лабораторная работа № ПР4 «Программирование циклов с условием»
Цель работы: научиться использовать оператор VBA «Цикл с условием».
Теоретические сведения
Программирование цикла с условием
Циклы с условием применяются тогда, когда число повторений неизвестно, а некоторые действия в программе должны повторяться до тех пор, пока выполняется определенное условие или до тех пор, пока не будет выполнено определенное условие. Условием может быть любым выражением, принимающим значение True (Истина) или False (Ложь). В VBA есть два основных цикла с условием — цикл Do While... Loop и цикл Do Until... Loop. Оба они могут быть с предусловием или с постусловием.
Циклы Do While | Until имеют следующий синтаксис:
Цикл с предусловием:
Do While | Until < Условие >
Операторы
[Exit Do]
Loop
Цикл с постусловием:
Do
Операторы
[Exit Do]
Loop While | Until < Условие >,
где Do — зарезервированное слово VBA, указывающее на начало цикла; While|Until — зарезервированные слова VBA, если используется While -> цикл выполняется, если < Условие > принимает значение True и заканчивает свою работу, если < Условие > принимает значение False. Если используется Until -> цикл выполняется, если < Условие >= False и заканчивает свою работу, если < Условие >= True; <Условие> — логическое выражение, принимающее значение True или False; Loop — зарезервированное слово VBA, указывающее на окончание цикла.
Цикл с предусловием и Цикл с постусловием отличаются тем, что Цикл с постусловием выполняется хотя бы один раз до проверки <Условие>, а Цикл с предусловием может не выполняться ни разу, если не выполняется <Условие>.
Используя цикл с условием, можно организовать бесконечный цикл. Иногда это бывает необходимо, гораздо чаще это происходит из-за ошибки пользователя. Для создания бесконечного цикла условное выражение должно быть таким, которое никогда не выполняется или выполняется всегда. Выйти из такого бесконечного цикла и прервать работу программы можно, нажав комбинацию клавиш <Ctrl+Break>.
Вызов процедуры
Выполнить процедуру типа Sub, у которой аргументы есть, можно только вызвав её из другой процедуры.
Таким образом, при написании собственной процедуры вы можете воспользоваться процедурами (и макросами), написанными другими пользователями. В свою очередь ваша процедура может быть использована в других приложениях.
Если процедура имеет аргументы, то она будет требовать эти аргументы при выполнении своей работы. Вызывается процедура с помощью оператора Call, вслед за которым должно следовать имя процедуры и список её параметров в скобках. Вместо входных параметров могут стоять их значения. Допускается и бесскобочная запись оператора вызова (при этом ключевое слово Call – имя оператора – не используется).
Лабораторная работа № ПР5 «Работа с рекуррентными формулами»
Цель работы: Получить устойчивые навыки работы с операторами VBA «Цикл с условием».
Задача 11 (цикл с условием). Для заданного e найти наименьшее n такое, что 2n/n!< e. Вывести все члены последовательности от 1-го до n -го.
Решение
Этап 1. Математическая часть
Дано: Eps – точность. Условие остановки выражение: 2n/n!< e.
Найти: n – число шагов, u – результат возведения в степень.
Мы можем запрограммировать возведение в степень и вычисление факториала,
u = 1 'первый множитель
n = 0 'количество шагов
Range("C1:E20").Clear
Do Until (u < Eps) Or (n >= Limit)
n = n + 1
q = 1
For i = 1 To n
q = q * i
Next i
u = 2 ^ n / q 'очередной множитель
Cells(n, 4).Value = n
Cells(n, 5).Value = u
Loop
но при таких вычислениях может быстро накапливаться ошибка и мы можем получить не верный результат.
Обратим внимание, что
u1=2\1/1!,
u2=2\2/2!=2*2/(1*2)= u1*21/2,
u3=2\3/3!=22*2/(1*2*3)= и2*2/3 и т.д,
т.е. у нас возникает множитель 2/n, умноженный на значение предыдущего шага.
Нам необходимо учесть, что число шагов может быть невообразимо много, поэтому мы введет константу для ограничения шагов Limit = 100.
(!) Самостоятельно разработать алгоритм на естественном языке и составить блок-схему.
Этап 2. Ввод данных в таблицу Excel
В ячейку А1 вводится “Eps =”, В ячейку B1 – значение числа Eps.
Этап 3. Определение переменных
Константа Limit = 100 (тип Integer)
Вводятся: Eps (тип Single).
Промежуточные переменные: (счетчик цикла) u1 (тип Single) – значение на предыдущем шаге.
Выводятся (результат): u (тип Single) – результат возведения в степень, n (тип Integ) – количество шагов.
Этап 4. Написание процедуры
На рабочем листе Лист1 при помощи Элементов управления создать элемент Кнопка (СommandBatton1).
Навести курсор мыши на Кнопку в режиме конструктора (на панели Элементы управления нажата первая кнопка (линейка с треугольником)). Вызвать контекстное меню ПКМ Выбрать пункт Свойства ® закладку Alpabetic, в списке свойств выбрать Caption, справа в поле ввода удалить старое название и ввести новое название кнопки 2n/n < Eps.
Навести курсор на Кнопку в режиме конструктора. Вызвать контекстное меню ПКМ. Выбрать пункт Исходный текст. Автоматически попадаем в режим редактора VBA и появляется заголовок Процедуры-События:
Private Sub CommandButton1_Click()
Степень_двух
End Sub
Для создания новой процедуры (функции) необходимо набрать выполнить команду меню редактора VBA: Insert(Вставка)\Procedure(Процедура) ® в
открывшемся диалоговом окне рис.3 Add Procedure (Вставка процедуры) ® установить переключатель Sub(Подпрограмма) ® В окне Name(Имя) ® ”Степень_двух” ® OK. После выполнения этих действий в окне модуля появится заготовка подпрограммы (функции) (заголовок и окончание), между которыми нужно поместить код тела подпрограммы (функции).
Набирать процедуру на месте курсора:
Public Sub Степень_двух()
'Описание констант
Const Limit As Integer = 100
'Описание переменных
Dim Eps As Single
Dim u As Single
Dim u1 As Single
Dim n As Integer
'Ввод переменных
Eps = Range("b1").Value
'Задание начальных значений
u = 1 'первый множитель
n = 0 'количество шагов
Range("C1:E20").Clear
'Вычисление значений
Do Until (u < Eps) Or (n >= Limit)
Cells(n, 4).Value = n
u1 = u
u = u1 * 2 / n 'очередной множитель
n = n + 1
Cells(n - 1, 5).Value = u
Loop
'Вывод результатов
Range("A6:A7").Clear
If n >= Limit Then
Range("A7").Value = n & " шагов не хватило для достижния точночти."
End If
End Sub
Этап 5. Выполнение
Перейти на рабочий лист (View®Microsoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейках D1:E6 появится результат.
Этап 6. Переименование листа
Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Eps2, нажать Enter.
Задачи для самостоятельной работы
Задача 12. Текущее среднее. Числа x1, x2, … последовательно поступают с устройства ввода. Все числа хранить в памяти нет необходимости; после ввода каждого числа нужно вычислить и напечатать среднее значение всех введенных чисел: .
Задача 13. Для заданных a и p вычислить по рекуррентному соотношению Ньютона:
; .
Сколько итераций надо выполнить для достижения заданной погрешности e, используя условие: ?
Задача 14. Проверить численно справедливость следующего разложения: и оценить скорость сходимости, найдя число слагаемых, необходимое для достижения заданной погрешности e. Примечение. Нам необходимо учесть, что число, возведенное в степень 0, равно 1, т.е. 20=1, и факториал 0!=1.
Задача 15. Для заданных значений n и x вычислить выражение: .
Лабораторная работа № ПР6 «Работа со строковыми переменными»
Цель работы: научиться работать со строковыми переменными типа String.
Теоретические сведения
Строковые переменные
Тип | Хранимая информация | Занимаемая память | Интервалы значений |
String (строка фиксированной длины) | Текстовая информация (строка) | 1 байт на каждый символ | От 1 до 65400 |
String (строка переменной длины) | Текстовая информация (строка) | 10 байт + 1 байт па каждый символ | От 0 до двух миллиардов символов |
Функции преобразования типов
Примеры функций | Значение |
Val(Строка) | Преобразует строку цифровых символов в число |
CStr(Число) | Преобразует числовое выражение или строку в строку |
CInt(Выражение) | Преобразует числовое выражение или строку в число типа Integer |
Cvar(Выражение) | Преобразует числовое выражение или строку в число типа Variant и др. |
Функции обработки строк
Примеры функций | Значение |
Len(Строка$) | Возвращает длину Строки$ |
Asc(Строковое выражение) | Возвращает ASCII код первого символа в строковом выражении |
Chr(asciiКодСимвола) | Возвращает символ, соответствующий указанному коду ASCII |
Mid(Строка$, Позиция& [, Длина&]) | В Строке$ выделяется подстрока начиная с заданной Позиции& длины Длина$ (Длина$ - необязательный аргумент) |
Left(Строка$, Длина&) | В Строке$ выделяется левая подстрока Длиной& |
Right(Строка$, Длина&) | В Строке$ выделяется правая подстрока Длиной& и др. |
Пример. Функция
Mid(«Иван Николаевич», 6, 3)
Возвращает «Ник».
Пример. Функции Chr(13) и Chr(10). 13 и 10 – это коды ASCII особых, невидимых символов, которые используются при выдаче или печати текста, – символа перехода на новую строку и символа возврата на левую сторону страницы (иначе, символ переноса и символ возврата каретки).
Задача 16 (работа со строковыми переменными). Написать программу, которая считает количество точек в строке. Строка вводится из ячейки MS Excel, код ASCII вводится с клавиатуры.
Решение
Этап 1. Математическая часть
Дано: Строка «Осень. Лес. Солнце. Опушка. Листва.»
(!) Самостоятельно разработать алгоритм на естественном языке и составить блок-схему.
Этап 2. Ввод данных в таблицу Excel
В ячейку А1 вводится строка «Осень. Лес. Солнце. Опушк....»
Этап 3. Определение переменных
Вводятся: St (тип String).
Промежуточные переменные: i (тип Integer) – счетчик цикла, SS (тип String) – искомый символ, x1(тип Integer) – ASCII код ".", L (тип Integer) – длина строки, SSS (тип String) – вырезаем из заданной строки с конца по символу, чтобы сравнить коды первых символов с искомым, x1(тип Integer) – ASCII код первого символа SSS.
Выводятся (результат): n (тип Integer) – количество точек в строке.
Этап 4. Написание процедуры
На рабочем листе Лист1 при помощи Элементов управления создать элемент Кнопка (СommandBatton1).
Private Sub CommandButton1_Click()
Dim St As String
Dim SSS As String
Dim SS As String
Dim L As Integer
Dim x As Integer
Dim x1 As Integer
Dim i As Integer
Dim n As Integer
'Ввод строки
St = Range("A1").Text
SS = "."
'Возвращает ASCII код "."
x1 = Asc(SS)
'Определение длины строки
L = Len(St)
'Подсчет количетсва точек
n = 0
For i = 1 To L
SSS = Right(St, i)
x = Asc(SSS)
If x = x1 Then
n = n + 1
End If
Next i
'Вывод результата в ячейку A2
SSS = "Количество точек в строке равно " + CStr(n)
Range("A2").Value = SSSEnd Sub
Этап 5. Выполнение
Перейти на рабочий лист (View®Microsoft Excel или Alt+F11). Выйти из режима Конструктора, левой клавишей мыши (ЛКМ) нажать Кнопку. В ячейке А4 появится результат «Количество точек в строке равно 7».
Этап 6. Переименование листа.
Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Количество точек в строке, нажать Enter.
Задачи для самостоятельной работы
Задача 17. Написать программу, которая считает сколько раз встречается цифра “9” в строке. Строка вводится из ячейки MS Excel. Цифра “9” вводится с клавиатуры.
Задача 18. Написать программу, которая выделяет первое два слово в строке. Вывести номер последнего символа первого слова. Строка вводится из ячейки MS Excel.
Оформлением в тетради должно содержать:
1. Условие задачи
2. Входные-выходные данные
3. Переменные: вводимые, выводимые, промежуточные
4. Блок-схема
5. Программа на VBA
6. Результаты вычисления контрольного примера.
Приложение 1
Глоссарий
Основы алгоритмизации
1.1. Понятия алгоритма
Алгоритмизацией – это составление пошагового описания процесса решения задачи.
Алгоритмом называется конечный набор правил, расположенных в определенном логическом порядке, позволяющий исполнителю решать любую конкретную задачу из некоторого класса однотипных задач. В разных ситуациях в роли исполнителя может выступать электронная или какое-либо иное устройство или человек (например, военнослужащий, охраняющий склад боеприпасов и действующий согласно алгоритмам, записанным в устав караульной службы).
1.2. Свойства алгоритма
1. Наличие ввода исходных данных.
2. Наличие вывода результата выполнения.
3. Однозначность (компьютер "понимает" только однозначные инструкции).
4. Общность - алгоритм предназначен для решения некоторого класса задач.
5. Корректность - алгоритм должен давать правильное решение задачи.
6. Конечность - решение задачи должно быть получено за конечное число шагов.
7. Эффективность – для решения задачи должны использоваться ограниченные ресурсы компьютера (процессорное время, объем оперативной памяти и т.д.)
1.3. Типы алгоритмов
I. Линейным алгоритмом (линейная последовательность операций) называется так потому, что выполняются только последовательные действия без условий и повторов. Линейная последовательность в данном примере состоит из блоков ввод/вывод данных.
II. Алгоритм ветвления (условный оператор) называется так потому, что после передачи ему управления выполнение алгоритма может пойти по одной из двух возможных ветвей. Какая именно ветвь будет выбрана, зависит от выполнения условия.
III. Цикл представляет собой многократно повторяющуюся последовательность операторов. Операторы повторяются конечное число раз до выполнения условия.
IV. Обход (безусловный переход по метке) еще одна структура, которая представляет собой передачу управления с пропуском нескольких шагов алгоритма.
1.4. Виды представления алгоритмов
I. Первоначально алгоритм записывается пошагово на естественном языке.
II. Псевдокод –полуформальный язык с ограниченным словарем (часто на основе английского языка), промежуточный между естественным языком и языком программирования. Запись алгоритма на псевдокоде называется структурным планом. Псевдокод удобен тем, что позволяет программисту сосредоточиться на формулировке алгоритма, не задумываясь над синтаксическими особенностями конкретного языка программирования.
III. Блок-схема – используется для разработки структуры программы (в англоязычной литературе используется термин flow-chart). Для изображения основных алгоритмических структур и блоков на блок-схемах используют специальные графические символы. Они приведены на рис. 4.
IV. Программирование – запись алгоритмы на выбранном языке программирования программирования для решения различных задач на компьютере.
1.5. Этапы разработки программы
В процессе создания любой программы, будь то небольшая учебная программа, предназначенная для демонстрации преподавателю, или серьезный проект, над которым работают десятки (а то и сотни) программистов, можно выделить несколько этапов. Затраты труда и времени на их выполнение различны, различаются эти затраты и для разных программ. Некоторые из этапов могут быть опущены или пройдены "незаметно", однако анализ процесса разработки приводит к выводу о том, что почти всегда, явно или неявно, приходится проходить следующие этапы разработки программы:
Ø постановка задачи;
Ø анализ, формализованное описание задачи, выбор математической модели;
Ø выбор или разработка алгоритма решения задачи;
Ø проектирование общей структуры программы;
Ø кодирование (запись алгоритма на языке программирования);
Ø отладка и верификация программы (исправление алгоритмических и синтаксических ошибок);
Ø получение результата, его интерпретация и, возможно, последующая модификация модели;
Ø публикация или передача заказчику результата работы;
Ø сопровождение программы.
Рассмотрим подробнее содержание каждого из перечисленных этапов. Постановка задачи выполняется заказчиком, в качестве которого может выступать внешняя организация, организация, в которой работает программист, начальник программиста, преподаватель, сам программист. На этом этапе задача, которую необходимо решить посредством составления программы для компьютера, формулируется на естественном языке (русском, китайском, языке племени мовонга-твонга). При этом важно осознать, что решение данной задачи с помощью компьютера – действительно оптимальный способ получения результата, Вряд ли стоит составлять программу для вычисления суммы двух чисел – в этом случае достаточно воспользоваться калькулятором. При решении вычислительной задачи может оказаться, что уравнения, описывающие математическую модель явления, могут быть решены точно, аналитически (так, что решение записывается с помощью элементарных или специальных функций). В этом случае также не нужен компьютер. Если же речь идет о расчете аэродинамических характеристик новой модели самолета, без суперкомпьютера не обойтись!
Анализ задачи включает определение входных и выходных данных, выявление возможных ограничений на их значения и обычно завершается формализованным описанием задачи, которое часто предполагает его математическую формулировку. Если речь идет о моделировании каких-либо явлений или процессов, на этом этапе разрабатывается математическая модель процесса (явления). В этом случае определяются факторы, которые играют основную роль, и отбрасываются те факторы, действие которых незначительно и которыми поэтому можно пренебречь. Так, при моделировании полета снаряда в поле тяготения Земли на небольшой высоте основное значение имеют сила тяжести и сопротивление воздуха, а неоднородности поля тяжести, кривизну поверхности Земли и действие ветра можно не учитывать.
Выбор или разработка алгоритма и численного метода решения задачи имеют важнейшее значение для успешной работы над программой. Тщательно проработанный алгоритм решения задачи – необходимое условие эффективной работы по составлению программы.
Проектирование общей структуры программы. На этом этапе происходит "архитектурная" проработка проекта. Определяя те части алгоритма, которые целесообразно оформить в виде подпрограмм модулей. Определяется и способ хранения информации - в виде набора простых переменных, массивов или других структур.
Кодирование - это запись алгоритма на языки программирования. Если алгоритм решения задачи, структура программы и структура данных тщательно продуманы и аккуратно записаны, затраты времени кодирования уменьшаются, а вероятность ошибок на этом этапе снижается.
Отладка и верификация программы представляет собой очень важную часть процесса разработки программы. Отладка заключается в устранении ошибок программирования, ошибок перевода алгоритма на язык программирования. Верификация - это доказательство того, что программа работает "правильно", дает правильный результат. Для этого разрабатывается система тестов, которые могут представлять собой специально подобранные наборы параметров, для которых задача может быть решена точно. Это могут быть, например, какие-нибудь предельные случаи. Если результат, полученный с помощью программы, совпадает (с учетом погрешности машинного счета) с ожидаемым, есть основание полагать, что программа работает корректно. Но это всего лишь основание, а не абсолютная уверенность! Среди начинающих программистов распространено убеждение, что если программа успешно откомпилирована и, будучи запущена на выполнение, выдает на экран ряды цифр, задача решена. На самом же деле программа готова, если разработчик смог доказать заказчику (да и самому себе), что результат работы программы является решением поставленной задачи.
Получение результата, его интерпретация с возможной последующей модификацией модели. Вот, наконец, программа проверена, большая часть ошибок устранена и есть обоснованная надежда на то, что, по крайней мере в рамках выбранной модели, она дает правильный результат. Этот результат необходимо проанализировать. Если речь идет о моделировании какого-то природного процесса следует сравнить полученные с помощью компьютера результаты и результаты наблюдений. Процесс такого анализа мы называем интерпретацией результатов расчета. Здесь программиста может ожидать разочарование - результат отличаться от требуемого. В этом случае, возможно, придется изменить саму модель, сделав ее более реалистичной.
Публикация или передача заказчику результат работы - это важнейший момент, момент рождения качественной программы. В научных исследованиях значение имеют результаты моделирования, которые публикуются в научных журналах. В других случаях конечным результатом работы может быть сама программа, которая передается заказчику для дальнейшей эксплуатации или выкладывается на ftp-сервер для свободного распространения и прославления автора программы.
Сопровождение программы предполагает консультации заказчику по работе программы, устранение замеченных в процессе ее эксплуатации, недостатков (а возможно, и ошибок), обучение пользователей работе с программой. Этот, заключительный этап имеет особое значение для больших и сложных программ.
Приложение 2
1. Основныепонятияязыка Visual Basic for Applications (VBA)
1.1. Алфавит языка VBA
Как и любой другой язык, VBA имеет свой алфавит. В него входят:
1. Прописные и строчные буквы латинского алфавита (A-Z, a-z);
2. Прописные и строчные буквы кириллицы (А-Я, а-я)[*];
3. Цифры от 0 до 9;
4. Символы подчеркивания “_”.
5. Неизображаемые символы («обобщенные пробельные символы»), используемые для отделения лексем друг от друг (пробел, табуляция, переход на новую строку);
6. Специальные символы, участвующие в построении конструкций языка: + – * / \ ^ = > < [ ] ().,:; { } ‘ & @;
7. Составные символы, воспринимаемые как один символ: <=, >=, <>. Разделители в составных символах недопустимы.
Комментарии используются для пояснения к тексту программы для пользователя, размещается на одной строке исходного текста программы, которая начинается со знака «‘» (апостроф) или с зарезервированного слова Rem. Программа не воспринимает текст, выделенный как комментарий и пропускает его:
‘ Комментарий
Rem Комментарий
Имена переменных должны удовлетворять следующим правилам:
1. Первый символ имени обязательно должна быть буква.
2. Нельзя использовать «.», «!», «@», «&», «$», «#», и пробел.
3. Имя должно содержать буквы, цифры и знак подчеркивания.
4. Длина имени не должна превышать 255 символов, но следует иметь в виду, что VBA различает только первые 31 символов от начала имени.
5. Имена не должны совпадать с зарезервированными словами VBA.
6. Имя не должны повторяться ни на одном уровне определения, то есть в одно процедуре не могут быть объявлены две переменные с одинаковыми именами.
Операция присваивания
При объявлении переменной резервируется ячейка памяти согласно указанного типа и ничего туда не заносит. Чтобы переменная получила свое значение нужно использовать операцию присваивание. Присваивание имеет следующую синтаксическую конструкцию:
ИмяПеременной = Значение
где ИмяПеременной — имя переменной; символ «=» знак операции присваивания; Значение — числа, или комбинация переменных, констант и функций, связанных знаками операций являющимися каким-либо выражением.
Математические операции
Операции сложения, вычитания, умножения и деления называют основными математическими операциями и дополнительных пояснений они не требуют.
Остальные математические операции называются дополнительными. Они применяются в специальных математических формулах и при обработке текстовой информации. Для пояснения, как они работают, рассмотрим примеры.
Пример 1.
Result = 10\3 – результат 3 (целая часть от деления);
Result = 10 Mod 3 – результат 1 (остаток от деления);
Result = 3^2 – результат 9;
Result = -3*2 – результат -6.
1.4. Операции отношения
Операция отношения может иметь только два результирующих значения — True (Истина) и False (Ложь), которые могут быть присвоены переменным типа Boolean или определенному свойству объекта. Перечень операций отношения VBA приведен в табл.1.
Операции отношения применяются для записи выражений условия, результатом выполнения которых являются значения True (Истина) или False (Ложь). Примеры записи операции отношения приведены в табл.1.
Таблица 1. Операции отношения их использование
Операция | Значения переменных | Выражение условия | Результат |
= | a = 10, b = 5 | a = b | False (Ложь), т.к. 10 не равно 5 |
<> | a = 10, b = 5 | a < > b | True (Истина), т.к. a = 10, b = 5 Þ 10 <> 5, Þ а не равно b |
< | a = 10, b = 5 | a < b | False (Ложь), т.к. 10 не больше 5 |
> | a = 10, b = 5 | a > b | True (Истина), т.к. 10 больше 5 |
=> | a = 10, b = 10 | a => b | True (Истина), т.к. 10 равно 10 |
<= | a = 10, b = 5 | a <= b | False (Ложь), т.к. 10 не больше 5 |
Text1.Text = “Вася” | True (Истина), если слово «Вася» является содержимым первого текстового поля, в противном случае – False (Ложь) | ||
k > = 15 | True (Истина), если переменная k содержит значение не меньше 15, в противном случае – False (Ложь) |
1.5. Логические операции
Логическиеоперации применяются в логических выражениях. Если существует несколько условий выбора в операциях отношения, то эти операции связываются между собой логическими операциями. Логические операции VBA приведены в табл.2, результат выполнения этих операций (таблица истинности) табл.3.
Таблица 2. Логические операции
Логические операции | Результат |
And | Принимает значение True, если обе переменных одновременно принимают значения True, в остальных случаях False (операция конъюнкция) |
Or | Принимает значение False, если обе переменные одновременно принимают значения False; в остальных случаях True (операция дизъюнкция) |
Not | Если переменная принимает значение True, то результирующим значением будет False. Если переменная принимает значение False, то результирующее значение будет True (операция отрицание). |
Xor | Если только одна из связываемых переменных имеет значение True, то результирующее значение так же будет True. Если обе переменных принимают одинаковые значения True или False, то результирующее значение будет False. |
Таблица 3. Таблица истинности
Операнды | Выражения | ||||
a | b | a And b | Not(a And b) | a Or b | a Xor b |
True | True | True | False | True | False |
True | False | False | True | True | True |
False | True | False | True | True | True |
False | False | False | True | False | False |
1.6. Константы и переменные
В таблице ниже (табл.4) приведены примеры объявления переменных, их размеры памяти и предельный диапазон значений, примеры использования.
Таблица 4. Базовые типы переменных VBA
Типы данных | Размер | Диапазон значений | Пример | |
Integer | 2 байта | -32768 до 32767 | Целочисленные типы | Dim I as Integer |
Byte | 1 байта | 0 до 255 | Dim K as Byte | |
Long | 4 байта | -2147483648 до 2147483647 | Dim J as Long | |
Single | 4 байта | -3.402E38 до 3.402E38 | Вещественные типы | Dim F as Single |
Double | 8 байта | -1.79E308 до 1.79E308 | Dim Summa as Double | |
Boolean | 2 байта | False или True | Булевский тип | Dim Yes as Boolean |
String | 10 байта | + до 2 млрд символов | Строковый тип | Dim Stroka as String |
Date | 8 байта | от 1 янв 100г. до 31 дек 9999г. | Тип Дата | Dim BirthDay as Date |
Variant | 16 байта | все числовые подтипы | Значения любого из перечисленных типов данных | Dim Chislo as Variant |
1.7. Встроенные математические функции
Таблица 5. Математические функции VBA
Примеры функций | Значение |
Abs(x) | Возвращает модуль числа x |
Cos(x) | Возвращает косинус числа x, заданного в радианах |
Sin(x) | Возвращает синус числа x, заданного в радианах |
Sqr(x) | Возвращает квадратный корень из числа x |
Rnd[(x)] | Возвращает псевдослучайное число одинарной точности в интервале от 0 до 1. Необязательный параметр, устанавливает то, как генерируется следующее псевдослучайное число |
Int(x) | Возвращает выделенную целую часть числа x |
Tan(x) | Возвращает тангенс числа x |
Atn(x) | Возвращает арктангенс числа x в радианах |
Exp(x) | Возвращает результат возведения числа e в указанную степень x, где e – основание натурального логарифма |
Log(x) | Возвращает значение натурального логарифма числа x |
Некоторые приемы оптимизации программ
Приступая к выполнению нового проекта, программист должен иметь в виду, что главная цель — создание такой программы, которая работает правильно, то есть сообщает пользователю решение той задачи, которая интересует заказчика. Если эта цель достигнута, можно считать, что проект выполнен успешно. Но иногда оказывается, что решение поставленной задачи получается слишком дорогой ценой. Если речь идет, к примеру, о расчете характеристик новых модели автомобиля, то для получения набора расчетных характеристик могут потребоваться часы, а то и сутки процессорного времени. С одной стороны, это тормозит работу по проектированию новой модели, а с другой — процессорное время часто является оплачиваемым ресурсом, стоимость которого может быть достаточно большой. При работе с базами данных может оказаться, что время доступа к требуемой записи слишком велико. В этом случае программисту приходится заниматься оптимизацией программы.
Оптимизацией называется такое преобразование исходного текста программы, при котором результат ее выполнения остается неизменным, но улучшаются некоторые характеристики. Эти характеристики зависят от выбранных критериев оптимизации. Основными критериями оптимизации являются: либо время выполнения программы, либо затраты оперативной памяти, размер исходного кода.
При оптимизации программы необходимо выявить те фрагменты исходного текста, которые являются “основными потребителями” ресурса, а затем перепрограммировать эти фрагменты, решая задачу оптимизации.
Мы рассмотрим только проблему оптимизации программы по затратам процессорного времени. Такая оптимизация особенно важна для расчетных программ, в которых большой удельный вес имеют математические вычисления.
I. Оптимизация, не зависящая от компилятора.
Современные компиляторы, то есть программы, создающие на основе исходного теста программы исполняемый код, как правило, выполняют и оптимизацию этого кода, размещая инструкции процессору таким образом, чтобы увеличить скорость выполнения программы. Вмешательство программиста в этот процесс не требуется. Следует иметь в виду, что оптимизация компилятором выполняется достаточно осторожно и возможности такой автоматической оптимизации ограниченны. Перечислим некоторые приемы, которые может использовать программист при написании исходного текста программы.
II. Инициализация объектов данных.
Во многих программах какую-то часть объектов данных необходимо инициализировать, то есть присваивать им начальные значения. Такое присваивание выполняется либо в самом начале программы, либо, например, в начале цикла. Правильная инициализация объектов данных позволяет сэкономить драгоценное процессорное время. Так, например, если речь идет об инициализации массивов, использование цикла, скорее всего, будет менее эффективным, чем объявление этого массива типизированной константой.
III.