Ввод-вывод одномерных массивов.
Массив в программе определяется поэлементно, т. е. каждому элементу массива присваивается определенное значение. Обращение к конкретному элементу массива осуществляется по его индексу. Например:
Dim B(l To 4) As Single B(l) = 2 B(2) = 7.5 B(3) = 6 B(4) = 11
Этот способ определения можно использовать, если количество элементов массива невелико. Однако часто массив содержит десятки или даже сотни элементов, и такой способ становится неприемлемым из-за большого количества операторов присваивания. Поэтому для ввода больших массивов следует организовать цикл, в котором индекс должен изменяться от нижней до верхней границы. Для ввода значений элементов массива в диалоговом режиме можно воспользоваться функцией InputBox. Пример. Организовать ввод одномерного массива с помощью функции InputBox и циклической структуры. Ввод массива закончить, когда в диалоговое окно InputBox ничего не будет введено.
Sub DemoDinArray() 'объявляем массив без указания размерности Dim Massiv() As Integer Dim i As Integer 'Объявляем счетчик Dim Num 'объявляем переменную Num i = 0 'Начальное значение счетчика i 'организуем бесконечный цикл, 'т. к. количество вводимых данных заранее неизвестно Do i = i + 1 'в диалоговом окне вводим значения для элементов массива Num = InputBox("Введите элемент массива A(" _ & i & ")", "Ввод элементов массива") If Len(Num) = 0 Then Exit Do 'выходим из цикла если в окно 'InputBox ничего не ввели 'изменяем размера массива с сохранением элементов ReDim Preserve Massiv(i) 'вводим данные в i-й элемент массива Massiv(i) = Num Loop End Sub
Рассмотренный способ ввода имеет существенный недостаток: при каждом запуске программы необходимо вновь вводить значения элементов массива. Поэтому при отладке программы или в учебных целях элементы массива можно задавать случайным образом при помощи функции Rnd и оператора Randomize.
Оператор Randomize
Инициализирует датчик случайных чисел.
Синтаксис оператора Randomize
Randomize [число]
Необязательный аргумент число представляет значение типа Variant или любое допустимое числовое выражение. Оператор Randomize использует аргумент число для инициализации датчика случайных чисел функции Rnd, передавая ему новое опорное число. Если аргумент число опущен, в качестве нового опорного числа используется значение, возвращаемое системным таймером. Функция Rnd
Возвращает значение типа Single, содержащее случайное число. Синтаксис функции Rnd
Rnd[(число)]
Необязательный аргумент число представляет значение типа Single или любое допустимое числовое выражение. Варианты аргумента число и возвращаемые значения функцией Rnd сведены в табл. 7.
Таблица 7
Функция Rnd возвращает значение, меньшее 1 и большее или равное нулю. Перед вызовом функции Rnd для инициализации генератора случайных чисел значением, возвращаемым системным таймером можно использовать оператор Randomize без аргумента. Ниже приведен программный код формулы, предназначенной для получения случайных целых чисел в заданном диапазоне:
CInt((верхняяГраница – нижняяГраница + 1) * Rnd + нижняяГраница)
Здесь верхняяГраница соответствует максимальному числу в диапазоне, а нижняяГраница - минимальному числу в диапазоне. В следующем примере оператор Randomize используется для инициализации генератора случайных чисел. Поскольку числовой аргумент оператора Randomize опущен, в качестве нового опорного числа используется значение, возвращаемое функцией Timer.
Dim x as Integer Randomize ' Инициализирует генератор случайных чисел. x = CInt((6 * Rnd) + 1)'Возвращает случайное число от 1 до 6.
Еще один пример показывает, как создается вектор , значения элементов которого расположены в диапазоне от -10 до 25 случайным образом.
Sub massiv2() Dim X(1 to 50) As Single Dim i As Integer 'Включить генератор случайных чисел Randomize For i = 1 To 50 X(i) = -10 + (25 - (-10)) * Rnd Next i End Sub
Ввод массива можно осуществить с помощью элементов управления формы, таких как List (список), ComboBox (комбинированное поле), которые представляют собой списки элементов. Также для ввода массива можно использовать файлы данных. Кроме того, в приложения Word и Excel ввод массива можно осуществить с помощью таблиц. Пример. Создать одномерный массив из элементов, находящихся в таблице документа Word. Допустим, в документе Word имеется таблицы, состоящие из одной колонки или из одной строки со значениями:
Покажем, как данные из таких таблиц можно присвоить одномерному массиву. В редакторе VBA вставим модуль, внутри которого поместим процедуру:
Sub ReturnCellContentsToArray()
Dim intCells As Integer 'Объявляем число ячеек Dim celTable As Cell 'Объявляем объект - ячейка Dim sngCells() As Single 'Объявляем динамический массив Dim intCount As Integer 'индексы массива 'Объявление диапазона внутри ячейки, ' содержимое этого диапазона помещается в массив Dim rngText As Range
'Считывание данных происходит, если в документе 'существует хотя бы одна таблица If ActiveDocument.Tables.Count >= 1 Then 'Работа внутри диапазона таблицы With ActiveDocument.Tables(1).Range 'определение количества ячеек в таблице intCells = .Cells.Count 'переопределение массива ReDim sngCells(intCells) intCount = 1 'начальный индекс 'Для каждой ячейки в коллекции ячеек таблицы For Each celTable In .Cells 'Установка диапазона внутри каждой из ячеек Set rngText = celTable.Range 'Т.к. в диапазоне внутри ячейки содержится 'скрытый символ уменьшаем данный диапазон 'на один символ rngText.MoveEnd Unit:=wdCharacter, Count:=-1 'присваиваем массиву содержимое диапазона 'внутри ячейки без скрытого символа sngCells(intCount) = CSng(rngText) 'увеличиваем индекс на единицу intCount = intCount + 1 Next celTable End With End If
End Sub
С помощью этого кода можно также считывать данные и из таблицы, которая состоит из нескольких строк и нескольких столбцов. В этом случае данные считываются в одномерный массив из таблицы слева – направо и сверху – вниз. При создании программ часто возникает задача записи в массив значений функции на определенном интервале. В этом случае следует воспользоваться динамическим массивом. Например, создадим программу для записи в массив значений функции при изменении от 3 до 7 с шагом 0.25.
Sub massiv3() 'Объявление динамического массива Option Base 1 Dim y() As Single 'Индекс определяемого элемента Dim i As Integer Dim X As Single For X = 3 To 7 Step 0.25 ' Перейти к следующему элементу i = i + 1 'Изменить размер массива ReDim Preserve y(i) y(i) = Exp(2 - X) + Sqr(X) Next X End Sub
Для вывода значений элементов одномерного массива необходимо организовать цикл по индексу массива, а в цикле вывести значение соответствующего элемента на печать. В следующем примере элементы массива записываются в переменную str_msg, а затем выводятся в диалоговом окне MsgBox. Предполагается, что выводимый массив уже существует.
str_msg = "" For j = 1 To i - 1 str_msg = str_msg & X(j) & ", " Next j 'вызываем стандартное диалоговое окно с кнопкой OK и помещаем надпись MsgBox "Введено: " & str_msg, , "Вывод массива"
Вместо диалогового окна массив можно вывести в объекты Label (метка), TextBox (текстовое поле), List (список), ComboBox (комбинированное поле) на форме, а также в документ Word.
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (214)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |