7.5.2
Функции преобразования типов
Visual Basic, в некоторых
случаях, выполняет автоматическое преобразование одного типа данных в другой.
Однако в процессе автоматического преобразования могут возникать ошибки, а в
некоторых случаях автоматическое преобразование не выполняется. Поэтому в
процессе разработки программы пользователь должен сам определять необходимость
преобразования типов данных. Для этого нужно применять функции преобразования
типов (табл. П.2).
Рассмотрим пример.
Допустим, надо сложить два
числа, значения которых вводятся с помощью управляющих элементов TextBox. Если
вычисления будут выполняться программой, код которой имеет
вид:
TextBox3.Text= TextBox1.Text + TextBox2.Text
то результат вычисления будет
неверным, так как в этом случае выполнится объединение строк. Например, если
исходными значениями будут 100 и 200, то получится результат 100200, что,
конечно, не является результатом арифметического сложения.
Для того, чтобы получить
правильный результат, предварительно нужно преобразовать исходные величины
строкового типа в числовые целого типа (или другого числового типа). Это
преобразование может быть выполнено с помощью функции CInt. Тогда фрагмент кода
для выполнения сложения будет иметь вид:
TextBox3.Text =
CInt(TextBox1.Text) + CInt(TextBox2.Text)
При выполнении этого кода будет
получен правильный результат – 300.
Правильный результат будет
получен, если фрагмент кода будет следующий:
TextBox3.Text =
Val(TextBox1.Text) + Val(TextBox2.Text)
В последнем фрагменте для
преобразования типов применена функция Val, которая преобразует строку числовых
символов в число, поэтому выполняется не объединение строк, а сложение чисел.
Различие этих двух функций заключается в следующем: для функции CInt аргументом
должна быть строка только числовых символов, иначе будет ошибка; для функции Val
аргумент может содержать не числовые символы. В этом случае для правильного
преобразования числовые символы должны располагаться в начале строки. Если
лидирующее положение занимают не числовые символы, то результатом преобразования
будет значение 0. Так если TextBox1.Text содержит значение 100ВВ, TextBox2.Text – 200Text, то все равно результатом
сложения будет значение 300. Если TextBox1.Text содержит значение A100, TextBox2.Text – Text200, то результатом сложения будет 0.
7.5.3
Математические
функции
Математические функции (табл.
П.3) предназначены для выполнения типовых математических расчетов (вычисление
значений тригонометрических функций, логарифмов, получения псевдослучайных чисел
и др.). Пусть, например, требуется вычислить значение квадратного корня числа
100. Фрагмент кода может иметь следующий вид:
Option
Explicit
Dim dblАргумент As Double,
dblРезультат As
Double
dblАргумент=100
dblРезультат=Sqrt(dblАргумент)
В результате выполнения этого кода переменная
dblРезультат получит значение 10.
Функции обработки строк
Visual Basic приведены в таблице П.5. Они служат для выполнения операций со
строками. В качестве иллюстрации применения некоторых из них рассмотрим
пример.
В финансовых расчетах часто
приходится округлять полученные значения до двух знаков после запятой. Такое
округление можно выполнить, если исходное значение предварительно поместить в
строковую переменную и сделать следующие шаги:
Вычислить номер позиции
разделителя используя функцию Instr;
Выделить целую часть до позиции
разделителя с помощью функции Left;
Выделить дробную часть с помощи
функции Mid;
Преобразовать дробную часть,
вставив символ разделителя после второго знака;
Преобразовать полученное
значение дробной части в тип с плавающей точкой используя функцию преобразования
типа CDbl;
Округлить полученное число до
целого с помощью функции Int;
Используя операцию объединения
строк сформировать строковое представление округленного
числа.
Ниже приведен фрагмент кода,
выполняющий такое округление.
Option
Explicit
Dim StrИсходнаяСтрока As String *
10
Dim strЦелаяЧасть As String *
4
Dim strДробнаяЧасть As String *
7
Dim intПозицияРазделителя As
Integer
Dim dblДробнаяЧасть As
Double
StrИсходнаяСтрока =
TextBox1.Text
intПозицияРазделителя = InStr(1,
StrИсходнаяСтрока,
",")
strЦелаяЧасть = Left(StrИсходнаяСтрока, _
intПозицияРазделителя -
1)
strДробнаяЧасть = Mid(StrИсходнаяСтрока, _
intПозицияРазделителя + 1, 2) & ","
_
& Mid(StrИсходнаяСтрока, intПозицияРазделителя +
3)
dblДробнаяЧасть = CDbl(strДробнаяЧасть)
strДробнаяЧасть = Fix(dblДробнаяЧасть)
TextBox2.Text = strЦелаяЧасть & "," &
strДробнаяЧасть
Вопросы для
самоконтроля
1. Какие символы допускается применять в именах переменных?
2. Можно ли имя переменной начинать с цифры или с символа подчеркивания?
3. Какие базовые типы данных поддерживает Visual Basic?
4. Напишите оператор, явно декларирующий строковую переменную для хранения почтового адреса.
5. Какой оператор должен присутствовать в разделе глобальных объявлений, чтобы исключить ошибки в случае появления неявно объявленных переменных?
6. Напишите оператор, декларирующий одномерный массив из 7 элементов целого типа и имеющий базовый индекс –3.
7. Что такое динамические массивы и как они декларируются?
8. Каково различие между переменной и константой. Какие типы констант поддерживает Visual Basic?
9. Что представляет собой пользовательский тип данных, как он определяется и объявляется?
10. Каково различие между линейным и блочным оператором If - Then?
11. Какой оператор Visual Basic позволяет сделать выбор из нескольких альтернативных вариантов?
12. Как определяется цикл с известным числом повторений?
13. Какие циклы с условием поддерживает Visual Basic?
14. В чем различие циклов с предусловием и постусловием ?
15. Что такое функция и как она определяется?
16. Как производится обращение к функции?
17. Какие типы встроенных функций есть в Visual Basic?
Задания для
самостоятельной работы
Задание
1.
Разработайте функцию пользователя для расчета реальной доходности с учетом налога на прибыль, которая вычисляется по формуле:
где i – годовая процентная ставка;
g – налог на прибыль, выраженный в процентах;
h – годовой темп инфляции, вычисляемый по формуле:
h=(1+ h1/12)12-1 ,
где h1/12 - месячный темп инфляции.
Для проверки и отладки программы используйте следующие исходные данные: i=60%, h1/12=3%, g=25% . Для них реальная доходность составит r=1,7%.
Задание 2.
Разработайте функцию пользователя для вычисления годовой процентной ставки контракта по кредиту, взятого на определенный срок при известных сумме долга и сумме, подлежащей возврату. Используйте формулу:
где P – сумма кредита;
S –сумма, подлежащая возврату
Т – срок кредита.
Для проверки и отладки программы используйте следующие исходные данные: Т= 4 месяца, P= 100 тысяч, S = 110 тыс. Для них годовая ставка составит i = 30%
Задание 3.
Разработайте функцию пользователя для
вычисления накопленной по процентам суммы, при условии, что известна годовая
процентная ставка, а вклады делаются неравномерными и непериодическими платежами
(см. условие задачи в упражнении 7). Для расчетов используйте формулу:
где i – годовая процентная ставка;
K – количество платежей;
Rk – величина k –того платежа;
tk – дата k – того платежа.
Для проверки программы используйте условие
задачи из упражнения 7. Для этих условий значение I = 1500.