Создание программ обработки символьной информации

Цель работы –изучение основ создания программ обработки символьной информации средствами языка программирования VBA.

После выполнения работы студент должен знать основы разработки программ обработки символьной информации, уметьсоздавать и отлаживать программы обработки символьной информации средствами VBA.

Справочная информация

Символьная информация постоянно присутствует во всех программах, как средство ведения диалога с пользователем, а также для отображения входных и выходных данных. Для ее описания используются типы данных String, Variant, а также символьные константы. При обработке символьной информации часто применяются функции обработки строк Asc(), Chr(), Lcase(), Ucase(), Left(), Rigt(), Mid(), Len(), Ltrim(), Rtrim(), Trim(), Spaсe(), String(), StrComp(), StrReverse(), InStr(), InStrRev(), Replace() (см. прилож. 14).

Пример программы

1. Требуетсясоздать программу, позволяющую преобразовать начальную букву строковой переменной в заглавную, если это не пробел.

Пример 3.1

‘Лабораторная работа №3

Sub Lab_rab_3_1()

Dim p, v As String

'объявляем переменные р (входная) и v (выходная) - строковыми

M1: p = InputBox("Введите строку символов", _

"Ввод данных", " абвгдежзе")

'Метка М1: переменной р присваиваем значение строки символов, 'вводимой с клавиатуры

If p = Empty Then Exit Sub

'если нажата кнопка Cancel, тогда завершаем процедуру

If Asc(Left(p, 1)) = 32 Then

'если ASCII код первого символа строки есть "пробел", тогда

MsgBox "Первый символ - пробел. Повторите ввод", _

vbInformation + vbOKOnly, "Внимание!"

'вывод на экран сообщения

GoTo M1

'и переход на метку М1

Else

'иначе

v = UCase(Left(p, 1)) & Right(p, Len(p) - 1)

'Формирование выходной переменной

MsgBox v, vbOKOnly, "Результат"

'Вывод результата

End If

'закрывающая операторная скобка

End Sub

2. Требуетсясоздать программу вывода на экран очередного символа строки. Реализовать режим повтора работы программы по запросу пользователя.

Пример 3.2

‘Лабораторная работа №3

Sub Lab_rab_3_2()

Dim p As String, i, n, k As Integer

met: p = InputBox("Введите строку символов", _

"Ввод данных", "абвгдеж")

If p = Empty Then Exit Sub

For i = 1 To Len(p)

'Цикл по I от 1 до количества символов строки

MsgBox Str(i) & " – тый символ строки - " & Mid(p, i, 1)

Next i

k = MsgBox("Продолжить работу программы", _

vbYesNo + vbQuestion)

'Переменной к присваивается значение, возвращаемое

'функцией MsgBox() в зависимости от нажатой пользователем

'кнопки Да или Нет

If k = vbYes Then GoTo met

End Sub

Задание

1. Выполните постановку задачи, опишите экономико-математическую модель и метод решения, составьте алгоритм решения и представьте их преподавателю.

2. В соответствии с вариантом задания (см. табл.4) создайте процедуру обработки символьной информации (см. Пример 3).

3. Отладьте программу, проверьте ее работоспособность, в том числе с критическими и недопустимыми значениями параметров.

4. Создайте в Кнопочной_форме кнопку для запуска созданной процедуры и проверьте ее работу.

5. Сохраните созданный модуль и представьте работу преподавателю.

Таблица 4

Варианты заданий

№ варианта Задание
  Три последние символа строки преобразовать к верхнему регистру, переместить их в начало строки и вывести результат на экран. Реализовать режим повтора работы программы по запросу пользователя. Ввод строки выполнить с помощью функции InputBox().
  Ввести с помощью функции InputBox() фамилию студента и вывести на экран обращение по схеме: «Господин Иванов!» или «Госпожа Иванова!» Проверку осуществлять на наличие буквы «а» в конце фамилии. Если фамилия заканчивается на другие буквы, тогда форму обращения уточнить с помощью запроса у пользователя.
  Удвоить или утроить (по указанию пользователя) каждую букву символьной строки по схеме: тень àттеенньь и вывести результат на экран. Ввод строки выполнить с помощью функции InputBox().Реализовать режим повтора работы программы по запросу пользователя.
  Найти гласные буквы в символьной строке и, если они есть, то преобразовать их в прописные и вывести результат на экран, если их нет - вывести об этом сообщение. Ввод строки выполнить с помощью функции InputBox().Реализовать режим повтора работы программы по запросу пользователя.
  Добавить в начало символьной строки символы «*», число которых равно числу символов строки и вывести результат на экран. Если первый символ – не цифра, то сообщить об этом пользователю. Ввод строки выполнить с помощью функции InputBox().Реализовать режим повтора работы программы по запросу пользователя.
  Найти цифры в символьной строке и, если они есть, заменить их на символ «!» и вывести результат на экран, если их нет – вывести об этом сообщение пользователю. Ввод строки выполнить с помощью функции InputBox().Реализовать режим повтора работы программы по запросу пользователя.
  Вывести на экран четные символы строки в обратной последовательности. Реализовать режим повтора работы программы по запросу пользователя. Ввод строки выполнить с помощью функции InputBox().
  Вывести на экран сообщение пользователю, четное или нечетное число гласных букв русского алфавита находится в символьной строке. Ввод строки выполнить с помощью функции InputBox().Реализовать режим повтора работы программы по запросу пользователя.
  Вывести на экран первую или вторую половину (по указанию пользователя) символьной строки. Ввод строки выполнить с помощью функции InputBox().Реализовать режим повтора работы программы по запросу пользователя.
  Найти в символьной строке двойные пробелы и, если они есть, заменить их на одинарные пробелы и вывести результат на экран. Реализовать режим повтора работы программы по запросу пользователя. Ввод строки выполнить с помощью функции InputBox().


Контрольные вопросы

1. Для каких целей применяется каждая из функций обработки строк:

Asc(), Chr(), Lcase(), Ucase(), Left(), Rigt(), Mid(), Len(), Ltrim(), Rtrim(), Trim(), Spaсe(), String(), StrComp(), StrReverse(), InStr(), InStrRev(), Replace()?

2. Объясните смысл использованного в примере программы выражения

v = UCase(Left(p, 1)) & Right(p, Len(p) - 1)

3. Объясните назначение параметров функции InputBox() и процедуры MsgBox, использованных в примере 3.

4. Каково отличие функции и процедуры?

5. *В профессиональном программировании использование оператора <Goto Метка> считается некорректным. Предложите вариант программы без использования перехода на метку.

Создание финансовых функций

Цель работы –изучение основ создания пользовательских финансовых функций средствами языка программирования VBA.

После выполнения работы студент должен знать основы создания финансовых функций, уметьсоздавать и отлаживать программы обработки финансово-экономической информации средствами VBA.

Справочная информация

При выполнении финансово-экономических расчетов часто приходится рассчитывать одни и те же финансовые показатели. Средством автоматизации выполняемых расчетов могут служить финансовые функции.

Различают стандартные и пользовательские финансовые функции.

Стандартные или встроенные финансовые функции уже присутствуют в составе приложения как готовые подпрограммы. Их основной перечень приведен в соответствующей литературе, справочной системе VBA и в прилож. 14.

Пользовательские финансовые функции создаются в дополнение к существующим стандартным функциям. Обращение к ним осуществляется таким же образом.

При разработке пользовательских функций следует предусмотреть логическую проверку корректности типов данных и значений входных параметров.

Пример программы

Требуется создать пользовательскую функцию расчета процентной ставки для полностью инвестированных ценных бумаг. Расчет выполняется по следующей формуле ( %):

Создание программ обработки символьной информации - student2.ru

где: погашение – объем инвестиции в ценные бумаги, руб;

инвестиция – объем средств, которые должны быть получены на дату вступления ценных бумаг, руб;

B – число дней в рассматриваемом году;

дата_вступ — дата погашения ценных бумаг. Эта дата определяет истечение срока действия ценных бумаг;

дата_согл — это дата соглашения для ценных бумаг; (дата_согл < дата_вступ).

Пример 4

Function ИНОРМА(инвестиция, погашение As Currency, _

дата_согл, дата_вступ As Date) As Single

If IsNumeric(инвестиция) = False Or IsNumeric(погашение) = False _

Or IsDate(дата_вступ) = False Or IsDate(дата_согл) = False Then

MsgBox "Недопустимые типы исходных данных", _

vbCritical + vbOKOnly, "Внимание!"

Exit Function

End If

If погашение < 0 Or инвестиция < 0 _

Or дата_согл >= дата_вступ Then

MsgBox "Недопустимые значения исходных данных", _

vbCritical + vbOKOnly, "Внимание!"

Exit Function

End If

ИНОРМА = Format((погашение - инвестиция) / инвестиция) _

* IIf(Year(дата_согл) Mod 4 = 0, 366, 365) / (дата_вступ - _

дата_согл), "Percent")

End Function

Задание

1. Выполните постановку задачи, опишите экономико-математическую модель и метод решения, составьте алгоритм решения и представьте их преподавателю.

2. В соответствии с вариантом задания (см. табл.5) создайте пользовательскую функцию вычисления значения финансового выражения, позволяющую выполнять логическую проверку параметров на соответствие типов данных, на критические и недопустимые значения (см. Пример 4).

3. Откомпилируйте программу (меню DebugàCompile) и в случае необходимости устраните синтаксические ошибки.

4. Из окна Immediate Window(редактор VBA à меню View à Immediate Window) обратитесь к функции (например, командой ?ИНОРМА(2500,2590,#01.01.14#,#12.29.14#)) и проверьте ее работоспособность, в том числе с критическими и недопустимыми значениями параметров и несоответствующими типами данных.

Замечание: при обращении к функции из окна Immediate Window для корректной ее работы параметры типа дата следует вводить в американском формате: #ММ/ДД/ГГ#.

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

Запустите конструктор форм и создайте форму, аналогичную представленной в прилож. 15;

При задании свойств полей не забудьте учесть форматы входных и выходных данных;

Закрепите за кнопками процедуры, аналогичные представленным ниже:

Private Sub Кнопка17_Click() ‘Кнопка «Очистить»

With Forms![Для_финансовой_функции]

![Поле1].Value = Empty

![Поле5].Value = Empty

![Поле7].Value = Empty

![Поле9].Value = Empty

![Поле15].Value = Empty

'Фокус на поле1

DoCmd.GoToControl "Поле1"

End With

End Sub

Private Sub Кнопка20_Click() ‘Кнопка «Рассчитать»

With Forms![Для_финансовой_функции]

![Поле15].Value = ИНОРМА(![Поле1].Value, _

![Поле5].Value, _

![Поле7].Value, _

![Поле9].Value)

End With

End Sub

Private Sub Кнопка26_Click() ‘Кнопка «Закрыть»

DoCmd.Close acForm, "Для_финансовой_функции"

End Sub

6. Проверьте и в случае необходимости отладьте работу формы и представьте результаты преподавателю.

Таблица 5

Варианты заданий

№ варианта Задание
Создать пользовательскую функцию расчета дохода по казначейскому чеку. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru , руб, где: цена – цена казначейского чека на 100 руб номинальной стоимости, руб; цена>0; дата_вступ – дата погашения для казначейского чека; дата_согл – дата соглашения для казначейского чека; дата_вступ не должна превышать дата_согл более чем на год; дата_вступ> дата_согл.
Создать пользовательскую функцию расчета накопленного дохода по ценным бумагам, процент по которым выплачивается в срок погашения. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; руб, где: номинал – номинальная стоимость ценных бумаг, руб; номинал>0; ставка – годовая процентная ставка для купонов по ценным бумагам; ставка>0; дата_погаш – дата погашения ценных бумаг; дата_вып – дата выпуска ценных бумаг; дата_погаш>дата_вып; Т – число дней в году.
Создать пользовательскую функцию расчета суммы, полученной к сроку вступления в силу полностью обеспеченных ценных бумаг. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; руб, где: инвестиция – объем инвестиции в ценные бумаги, руб; инвестиция>0; скидка – процентная норма скидки для ценных бумаг; скидка>0; дата_вступ – дата погашения для ценных бумаг; дата_согл – дата согласования для ценных бумаг; дата_вступ> дата_согл; Т – число дней в году.
Создать пользовательскую функцию расчета нормы скидки для ценных бумаг. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; %, где: выкуп – выкупная цена ценных бумаг за 100 рублей номинальной стоимости, руб; выкуп>0; цена – стоимость ценных бумаг за 100 рублей номинальной стоимости, руб; цена>0; дата_вступ – дата погашения для ценных бумаг; дата_согл – дата согласования для ценных бумаг; дата_вступ> дата_согл; Т – число дней в году.
Создать пользовательскую функцию расчета цены за 100 рублей номинальной стоимости для казначейского чека. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; руб, где: скидка – процентная норма скидки для казначейского чека; скидка>0; дата_вступ – дата погашения для ценных бумаг; дата_согл – дата согласования для ценных бумаг; дата_вступ> дата_согл; Т – число дней в году.
Создать пользовательскую функцию расчета цены за 100 рублей нарицательной стоимости ценных бумаг, по которым доход выплачивается в срок вступления в силу. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; руб, где: ставка – процентная ставка дохода по ценным бумагам на дату выкупа; ставка>0; доход – годовой доход по ценным бумагам, руб; доход>0; дата_вып – дата выпуска ценных бумаг; дата_вступ – дата погашения для ценных бумаг; дата_согл – дата согласования для ценных бумаг; дата_вступ> дата_согл> дата_вып; Т – число дней в году.
Создать пользовательскую функцию расчета цены за 100 рублей номинальной стоимости ценных бумаг, на которые сделана скидка. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; руб, где: погаш – выкупная цена ценных бумаг за 100 рублей номинальной стоимости, руб; погаш>0; скидка – процентная норма скидки для ценных бумаг, скидка>0; дата_вступ – дата погашения для ценных бумаг; дата_согл – дата согласования для ценных бумаг; дата_вступ> дата_согл; Т – число дней в году.
Создать пользовательскую функцию расчета фактической годовой процентной ставки. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; %, где: номин_ставка – номинальная годовая процентная ставка; номин_ставка>0; периодов_в_году – целое число периодов, составляющих год; периодов_в_году>0.
Создать пользовательскую функцию расчета амортизации имущества для указанного периода. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; руб, где: стоим – начальная стоимость имущества, руб; стоим>0; ост_стоим – остаточная стоимость имущества в конце периода амортизации, руб; ост_стоим>0; время_эксплуатиции – количество периодов, за которые собственность амортизируется; период – указанный период, для которого рассчитывается амортизация (должен измеряться в тех же единицах, что и время_эксплуатации).
Создать пользовательскую функцию расчета значения наращенного капитала с учетом дисконтирования. Расчет выполняется по следующей формуле: Создание программ обработки символьной информации - student2.ru ; руб, где: капитал – текущий размер вложенного капитала, руб; капитал>0; норма – коэффициент дисконтирования или норма доходности, в долях единицы; норма>0; тек_год – текущий год; персп_год – перспективный год.

Контрольные вопросы

1. Как осуществляется передача параметров в функцию?

2. В чем заключается отличие между процедурой и функцией?

3. Объясните назначение стандартных функций, использованных в программе (см. Пример 4).

4. Каким образом осуществляется расчет числа дней в указанном пользователем году (см. Пример 4)?

5. В электронной таблице MS Excel найдите встроенную финансовую функцию, аналогичную созданной Вами. Обратитесь к ней и сравните пользовательский интерфейс и результаты расчетов. Выводы сообщите преподавателю.

6. *Предложите свой вариант расчета числа дней в году.

Наши рекомендации