Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воробьева.Приемы_программирования_в среде_VBfor...doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.58 Mб
Скачать

Две основные функции преобразования типов данных

Строкой называется последовательность символов (текст), взятая в кавычки. Примеры строк:

"Мир всем народам!"

"75"

"100 рублей"

"Х=96.12"

Часто бывает необходимо преобразовать строку в число. Для этого используется функция Val. Она преобразует числовое начало строки в число. Если функция Val этого сделать не может, то она возвращает 0. Аргументом функции Val является строка; а возвращает эта функция число.

Для обратного преобразования (т.е. числа в строку) используется функция Str. Аргументом этой функции является число, переменная какого-либо из числовых типов или арифметическое выражение. Возвращает функция Str строку. Чтобы понять принципы преобразования посмотрите и исполните приведенную ниже программу.

Задание. Путем пошагового выполнения (программу запускаете не командой Run, а выполняете ее пошагово с помощью клавиши F8) проверьте правильность работы следующей программы:

Public Sub StrVal()

Dim strA As String

Dim curB As Currency

strA = "45,77"

curB = Val(strA) 'Результат: curB = 45,77

strA = Str(curB) 'Результат: strA ="45,77"

сurB = Val("4,7 = X") 'Результат: curB = 4,7

curB = Val("X = 4,7") 'Результат: curB = 0

End Sub

Первый комментарий соответствует случаю, когда при пошаговом выполнении программы желтым выделен оператор

strA = Str(curB)

Этот комментарий означает следующее: если указатель мышки подвести к curB, то высветится curB = 45.77 ‑ результат выполнения оператора, находящегося в одной строке с комментарием.

Второй комментарий соответствует случаю, когда желтым выделен оператор сurB = Val("4.7 = X").

Этот комментарий означает: если указатель мышки подвести к strA, то высветится strA = " 45.77" и т.д.

Аналогичный смысл имеют все комментарии в программах, начинающиеся со слова «Результат».

Подчеркнем, что при остановах во время выполнения программы желтым цветом выделяется первый из невыполненных операторов.

Ввод, вывод и генерация исходных данных

В VВA имеется большое количество встроенных процедур, которые отличаются от пользовательских процедур тем, что их описания были запрограммированы разработчиками Visual Ваsic for Application. От пользователя компьютера тексты встроенных процедур скрыты.

К встроенным функциям относится функция, предназначенная для ввода информации (в программу) с помощью стандартных окон Windows.

Примером встроенной подпрограммы является подпрограмма, предназначенная для вывода информации (из программы) в стандартные окна Windows.

Используем встроенные процедуры InputВох и МsgВох в программе расчета длины гипотенузы прямоугольного треугольника по длинам катетов.

  1. В окно кода введем программу

Sub Pythagoras()

Dim a As Single

Dim b As Single

Dim c As Single

Dim s As String

1: s = _

InputBox ("Введите длину 1 катета и нажмите ОК")

2: a = Val(s)

3: s = _

InputBox ("Введите длину 2 катета и нажмите ОК")

4: b = Val(s)

5: c = Sqr(a^2 + b^2)

6: s = Str(c)

7: MsgBox s

End Sub

    1. Запустим программу Pythagoras. Появится окно, предлагающее ввести длину первого катета (рис.12). С помощью клавиатуры введем в текстовое поле, например, значение 400 (без кавычек), и нажмем кнопку ОК.

    2. П

      Рис.12. Первое окно для ввода исходных данных

      оявится окно, предлагающее ввести длину второго катета (рис.13). Введем, например, значение 300; после этого нажмем кнопку ОК.

  1. П

    Рис.13. Второе окно для ввода исходных данных

    оявится окно, содержащее рассчитанное значение длины гипотенузы (рис.14).

  2. Кликнем на кнопке ОК для закрытия окна и завершения выполнения программы Pythagoras.

П

Рис.14. Окно с результатом расчета

ервый оператор программы (с меткой 1) содержит функцию InputBox. Она используется для ввода информации с клавиатуры. Возвращает эта функция строку, введенную в текстовое поле окна на рис.12, т.е. "400". Эта строка присваивается переменной s строкового типа. Второй оператор преобразует значение строки s в число 400 и присваивает это значение переменной числового типа а. Третий оператор присваивает переменной s строку "300", введенную в текстовое поле окна на рис.13. Четвертый оператор преобразует значение строки s в число 300 и присваивает это значение переменной b. Пятый оператор рассчитывает длину гипотенузы по теореме Пифагора. Полученное значение 500 присваивается переменной числового типа с. Шестой оператор преобразует значение 500 в строку. В результате выполнения этого оператора переменная s принимает значение "500". Седьмой оператор, представляющий собой обращение к подпрограмме МsgВох, выводит на экран окно с рассчитанным значением 500 (рис.14).

В обращениях к процедурам InputBox и МsgВох фигурирует один параметр (строкового типа), который является обязательным. Однако параметров может быть несколько. Назначение необязательных параметров можно посмотреть в справочной системе, вызываемой нажатием клавиши F1.

В общем виде формат записи функции InputBox имеет следующий вид:

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

где: prompt – комментарий к вводимой информации;

title – заголовок окна;

default – значение по умолчанию (оно будет ответом функции при простом нажатии кнопки «Ok»;

xpos, ypos – координаты левого верхнего угла окна;

helpfile, context – имя файла с текстом помощи и соответственно контекстная ссылка на нужную статью помощи.

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

  • получение строковой переменной

Nm=InputBox(“Как Вас зовут ?”);

  • ввод числа

X=Val(InputBox(“Введите число от 1 до 10, Х=”)).

Иногда надо получить более сложные данные, в этом случае можно пользоваться стандартной процедурой с этим же именем. В записи к описанным выше формальным параметрам добавлен параметр Type, который может иметь следующие значения:

Значение Тип данных

0 формула для ячейки на листе

1 число

2 строковая переменная

4 логическая переменная (True, False)

8 ссылка на указанную ячейку

16 ошибка, например #N/A

64 массив данных

Примеры использования процедуры:

  • получить на число

X=Application.InputBox("Укажите ячейку", , , , , , , 1)

  • получаем ссылку на указанную ячейку

Set X=Application.InputBox("Укажите ячейку", , , , , , , 8)

в данном случае мы создаем объект и присваиваем ему данные объекта, с которым мы хотим работать.

Отметим, что в справочной системе подпрограмма МsgВох называется функцией, т.к. ее можно использовать в арифметических выражениях. При этом в программу возвращается значение типа Integer, соответствующее кнопке, на которой кликнул пользователь. Приведем пример использования этого:

В программу Pythagoras введем расчет площади прямоугольного треугольника. Для этого седьмой оператор заменим тремя операторами:

Sub Pythagoras()

Dim a As Single

Dim b As Single

Dim c As Single

Dim s As String

1: s = _

InputBox ("Введите длину 1 катета и нажмите ОК")

2: a = Val(s)

3: s = _

InputBox ("Введите длину 2 катета и нажмите OK")

4: b = Val(s)

5: c = Sqr(a^2 + b^2)

6: s = Str(c)

Dim Ret As Integer

Ret = MsgBox(s, vbYesNo, "Paccчитать площадь?")

If Ret = vbYes Then MsgBox Str(a * b / 2)

End Sub

При выполнении полученной программы изменится содержимое окна с результатом расчета длины гипотенузы (рис.15). При клике на кнопке Уеs появится окно с результатом расчета площади треугольника (рис.16).

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

Рис.15. Первое окно с результатом расчета

Рис.16. Второе окно с результатом расчета

Функция возвращает случайное число в интервале от 0 до 1 с равномерным распределением. Для получения различных наборов можно строить различные комбинации вычислений с использованием этой функции:

Public Sub InputDates()

Dim X() As Integer

N = InputBox("Введите размер массива(от 2 до 10")

ReDim X(N)

For i = 0 To N

X(i) = Rnd() * 50

Next i

End Sub

Здесь мы генерируем N целых чисел в интервале от 1 до 50 в виде одномерного массива Для генерации, например, чисел в интервале от -25 до 25 надо в строку X(i) = Rnd() * 50 дописать - 25. Чтобы получить вещественные числа достаточно просто описать массив как Double.

Можно записать общую формулу для генерации чисел в заданном диапазоне, которая будет иметь вид X=Xнач +СлЧисло*dX, где Хнач – начало набора, dX – размер диапазона и СлЧисло – случайное число.