Мегаобучалка Главная | О нас | Обратная связь


Операторы и функции для работы с массивами.



2020-02-04 555 Обсуждений (0)
Операторы и функции для работы с массивами. 0.00 из 5.00 0 оценок




Лабораторная работа №22

Действия над массивами данных

 

Понятие массива

Мaccив -нaбop пocлeдoвaтeльнo индeкcиpyeмыx элeмeнтoв, имeющиx oдинaкoвый внyтpeнний тип данных. Примерами таких данных могут быть результаты экспериментов, цифры статисти­ческой отчетности, табличные значения той или иной функции, список фами­лий студентов в группе, их оценок по какому-либо предмету и т.п.

Использование массивов в программах позволяет существенно умень­шить размер программы и время разработки за счет использования цикличе­ской обработки данных. Например, необходимо хранить все фамилии 25 студентов группы. Для этого можно просто определить и использовать 25 раз­личных переменных типа String. Но, вместо этого, можно объявить один массив, содержащий 25 однотипных элементов.

Другой пример- поле для игры в «Морской бой», которое можно представить в виде двумерного массива из логических переменных, причем, если в точке с координатами  есть корабль, то значение переменной равно True (истина), а если нет, то False (ложь).

Таблица значений определенной функции (например, y=x2) тоже представляет собой двумерный массив, но уже числового вида:

 

x 0 1 2 3 4
y 0 1 4 9 16

 

Каждый элемент массива характеризуется порядковым номером (ин­дексом), который однозначно определяет положение элемента в массиве. Ин­дексы используются для организации доступа к элементам массива. Количест­во индексов (размерностей) определяет порядок массива, который в языке Visual Basic не может быть больше 60.

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

Вектор, элементы которого записаны в строку, называется вектором-строкой. Например:

Вектор, элементы которого записаны в столбец, называется вектором-столбцом. Например:

Прямоугольная таблица, составленная из элементов и имеющая n строк и m столбцов, называется двумерным массивом или матрицей размера n x m. Элементы матрицы обозначаются в виде , где i - номер строки, j - номер столбца, на пересечении которых находится этот элемент. Например:

 

Так как кaждый элeмeнт мaccивa имeeт oпpeдeляющий eгo yникaльный нoмep (индeкc), то измeнeниe oднoгo элeмeнтa мaccивa нe пpивoдит к измeнeнию дpyгиx элементов.

Массив представляет собой одну переменную с множеством ячеек памяти для хранения значений, тогда как обычная переменная имеет только одну ячейку, в которой может храниться только одно значение.

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

Массивы подразделяются на статические и динамические.

Статические массивы - это массивы, у которых количество элементов и размерность не изменяются в процессе выполнения программы. Границы статического массива устанавливаются на этапе разработки.

Динамические массивы могут изменять свою размерность в ходе выполнения программы в со­ответствии с конкретными условиями.

Часто перед выполнением программы количество элементов массива или его размерность неиз­вестны. Поэтому в процессе выполнения программы возникает необходимость изменять размер массива. В этом случае первоначально массив следует объя­вить как динамический. А что значит объявить массив? Рассмотрим это далее.

 

Объявление массивов

 

Перед использованием в программе массивы должны быть объявлены (описаны). Это требование обязательно как для массивов, которые вводятся в качестве исход­ных данных, так и для тех, которые формируются в самой программе в резуль­тате каких-либо вычислений.

Цель описания массива состоит в том, чтобы предупредить вычислитель­ную систему об ожидаемом типе и количестве элементов массива, под которые система резервирует необходимое число ячеек оперативной памяти, а также о размерности массива, т.е. о числе индексов каждого элемента.

Описание статических массивов так же, как и переменных, осуществля­ется оператором Dim, в которой указывается имя массива и тип содержащихся в нем данных. Кроме того, в отличие от описания переменных, указывается размерность (индексы) массива и количество элементов входя­щих в каждую из размерностей (индексов). Вместо ключевого слова Dim, можно использовать также Public. Правила применения этих операторов такие же, как и для переменных.

Синтаксис оператора Dim:

 

Dim ИмяМассива (Индексы) [As Тип]

 

где ИмяМассива - имя массива, удовлетворяющее стандартным правилам именования переменных.

Тип -тип данных переменной (поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant).

Индексы - размерности массива. Данный параметр имеет следующий синтаксис:

 

[Нижний То] Верхний [,[Нижний То] Верхний] ...

 

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

Если нижний индекс не указывается, то счет элементов начинается с номера по умолчанию.

Когда нижний индекс не задан явно, нижняя граница массива определяет­ся оператором Option Base. В Visual Basic no умолчанию индексирование всегда начинается с нуля, т.е. индекс 0 обозначает первый элемент массива, ин­декс 1 — второй и т.д. Оператор Option Base позволяет задать индексацию массива с 1. Этот оператор должен находиться вне процедур и функций «контейнера» (формы, модуля). Допустимыми значениями для Option Base являются только 0 и 1.

Оператор Dim должен помещаться в программе раньше любых строк программы, выполняющих те или иные действия с элементами соответствующих мас­сивов.

Некоторые возможные способы объявления массива сведены в табл. 4.

 

Таблица 4

Способ объявления массива Пример объявления массива Количество элементов В массиве

Option Base 0 (или отсутствует) и массив задается верхним индексом

Dim x(3) as Integer Массив состоит из 4 элементов: x(0), x(1), x(2), x(3)
Dim x(2,2) as Integer Массив состоит из 9 элементов (3 строки, 3 столбца):
x(0,0) x(0,1) x(0,2)
x(1,0) x(1,1) x(1,2)
x(2,0) x(2,1) x(1,2)

 

Option Base 1, массив задается верхним индексом

Dim x(3) as Integer Массив состоит из 3 элементов: x(1), x(2), x(3)
Dim x(2,2) as Integer

Массив состоит из 4 элементов (2 строки, 2 столбца):

x(1,1) x(1,2)
x(2,1) x(1,2)

 

Option Base 0 (или отсутст­вует),

Option Base 1,

массив задается диапазоном индексов

Dim x(1 to 3) as Integer Массив состоит из 3 элементов: x(1), x(2), x(3)
  Dim x(1 to 2, 1 to 2) as Integer

Массив состоит из 4 элементов :

x(1,1) x(1,2)
x(2,1) x(1,2)

 

Для многомерных массивов:

Option Base 0 (или отсутствует), массив может задаваться как верхним индексом так и диапазоном индексов

Dim x(1 to 2, 2) as Integer

Массив состоит из 6 элементов (2 строки, 3 столбца):

x(1,0) x(1,1) x(1,2)
x(2,0) x(2,1) x(1,2)

 

Dim x(3, 1 to 2) as Integer

Массив состоит из 8 элементов (4 строки, 2 столбца):

x(0,1) x(0,2)
x(1,1) x(1,2)
x(2,1) x(1,2)
x(3,1) x(3,2)

 

Для многомерных массивов:

Option Base 1, массив может задаваться и верхним индексом и диапазоном индексов

Dim x(1 to 2, 2) as Integer

Массив состоит из 4 элементов (2 строки, 2 столбца):

x(1,1) x(1,2)
x(2,1) x(1,2)

 

Dim x(3, 1 to 2) as Integer

Массив состоит из 6 элементов (3 строки, 2 столбца):

x(1,1) x(1,2)
x(2,1) x(1,2)
x(3,1) x(3,2)

 

 

Динамический массив создается в два этапа. Сначала массив определяет­ся с помощью операторов Static, Dim, Private, или Public с пустыми скобками, как показано в следующем примере.

 

Dim sngArray() As Single

Затем в программе следует вычислить необходимый размер массива в некоторой переменной, например N, и изменить размер динамического массива с помощью оператора ReDim.

Синтаксис оператора ReDim:

 

ReDim [Preserve] ИмяМассива(Индексы) [As Тип]

 

ИмяМассива, Тип – параметры, аналогичные описанным выше в операторе Dim при объявлении статического массива;

Preserve   - параметр (необязательный), это ключевое слово, используемое для сохранения данных в существующем массиве

В отличие от оператора Dim, оператор ReDim используется только в процедурах. При этом тип данных указывать не обязательно, особенно если он уже определен оператором Dim. Оператор ReDim можно использовать для изменения числа элементов или размерности массива. Однако нельзя объявить массив с данными одного типа, а затем использовать ReDim для при­ведения массива к другому типу, за исключением случая, когда массив содер­жит переменные типа Variant. Только в этом случае допустимо приведение массива к явному типу данных.

Таким образом, размерность массива можно при необходимости изме­нить. Однако при этом возникает опасность потерять его содержимое, так как после изменения размерности элементам массива присваиваются значения по умол­чанию.

 

Пример. Пусть у нас задан массив:

 

2 8 6 3 7 5 6

 

 

Dim a() as Integer 'Объявляем массив

ReDim a(1 to 8) 'Изменяем размерность массива

 

В результате получим массив:

 

0 0 0 0 0 0 0 0

 

Количество элементов массива стало равно 8, однако все элементы массива стали равны нулю.

В VBA предусмотрена возможность изменять размерность массива без потери содержимого. Для этого следует использовать ReDim вме­сте с ключевым словом Preserve. При этом следует учитывать, что для многомерных массивов можно изменять только «последнее» измерение. Например, если массив имеет только одну размерность, то можно изменить ее, так как она является единственной и «последней» размерностью. Если же массив имеет две или более размерностей, то для сохранения содержимого массива, возможно изменение значения только «последней» из них. Не допускается изменение числа размерностей.

Проиллюстрируем изложенное фрагментом программы

 

Dim a() As Single

ReDim a (10, 10)

ReDim Preserve a(10, 15) 'правильно

ReDim Preserve a(15, 15) 'ошибка

В четвертой строке допущена ошибка, т.к. изменяется и первая, и вторая размерности.

При изменении размерности можно изменять и верхнюю, и нижнюю границы индекса. Но если при этом используется ключевое слово Preserve, то разрешено изменять только верхнюю границу, что видно из примера:

 

Dim a()As Single

'Переопределение массивов

ReDim a(1 То 10)

ReDim Preserve a(l To 15) 'правильно

ReDim Preserve a(10 То 15) 'ошибка

 

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

Оператор ReDim Preserve увеличивает размер массива, сохраняя при этом его содержимое. В следующем примере показывается, как можно увеличить массив varArray на 10 элементов без уничтожения текущих значений элементов массива.

 

ReDim Preserve varArray(UBound(varArray) + 10)

Функция UBound (будет описана далее) возвращает значение типа Long, содержащее максимально доступный индекс указанной размерности массива.

В следующем примере оператор ReDim используется для первоначального и повторного выделения памяти для динамических массивов.

 

Option Base 1

Dim MyArray() As Integer ' Объявляет динамический массив.

Redim MyArray(5) ' выделяется память для размещения

' 5 элементов.

For I = 1 To 5 ' Выполняет цикл 5 раз.

MyArray(I) = I ' Инициализирует массив.

Next I

 

Теперь нам нужно изменить размер массива и его элементы. Это осуществляется с помощью следующего оператора

 

Redim MyArray(10) ' Увеличивает размер массива до 10 элементов.

For I = 1 To 10 ' Выполняет цикл 10 раз.

MyArray(I) = I ' Инициализирует массив.

Next I

 

Далее изменив размер массива, сохраним существующие элементы.

 

Redim Preserve MyArray(15) ' Увеличивает размер массива до 15 элементов.

Операторы и функции для работы с массивами.

 

Функция Array

 

Возвращает значение типа Variant, содержащее массив.

 

Синтаксис функции Array

 

Array(списокАргументов)

 

СписокАргументов представляет разделенный запятыми список значений, присваиваемых элементам массива, содержащегося внутри значения типа Variant. Если аргументы не указываются, создается массив нулевой длины.

Для определения элемента массива записывается имя переменной, за которым следуют скобки, содержащие номера индексов нужного элемента. В следующем примере первый оператор создает переменную A типа Variant. Второй оператор присваивает целый массив переменной A. Последний оператор показывает, как присвоить переменной В значение второго элемента массива.

 

Dim A As Variant  'объявляется переменная типа Variant

A = Array(10,20,30) ' массив в скобках присваивает переменной A

'Переменной B присваивается значение элемента массива A(2)

B = A(2)

 

 

Нижняя граница индексов массива, созданного с помощью функции Array, всегда равняется нулю. В отличие от массивов других типов, она не определяется нижней границей, заданной в операторе Option Base.

Примечание. Значение типа Variant, не описанное как массив, все равно может содержать массив. Переменная типа Variant может содержать массив любого типа, за исключением строк фиксированной длины и определяемых пользователем типов.

В следующем примере функция Array используется для возвращения значения типа Variant, содержащего массив.

 

Option Base 1

Dim MyWeek, MyDay

MyWeek = Array("Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс")

MyDay = MyWeek(2) ' MyDay содержит "Вт".

MyDay = MyWeek(4) ' MyDay содержит "Чт".

 

Функция LBound

 

Возвращает значение типа Long, содержащее минимально доступный индекс указанной размерности массива.

 

Синтаксис функции LBound

 

LBound(имяМассива[, размерность])

 

Синтаксис функции LBound содержит следующие элементы:

 

имяМассива – имя переменной массива, удовлетворяющее стандартным правилам именования переменных.

размерность    (необязательный), Variant (Long) – целое число, указывающее размерность, нижнюю границу которой возвращает функция. Для первой размерности следует указать 1, для второй 2 и т.д. Если аргумент размерность опущен, подразумевается значение 1.

В следующем примере LBound возвращает значения, для массива:

 

Dim Lower

Dim A(1 To 100, 0 To 3, -3 To 4)

Dim AnyArray(10)

X = LBound(A, 1) 'Возвращается 1

X = LBound(A, 2) 'Возвращается 0

X = LBound(A, 3) 'Возвращается -3

'Возвращает 0 или 1 (в зависимости от оператора Option Base).

Lower = Lbound(AnyArray)   

 

По умолчанию нижняя граница любой размерности имеет значение 0 или 1, в зависимости от значения задаваемого в операторе Option Base. Нижней границей в массивах, созданных с помощью функции Array, всегда является нуль; вне зависимости от значения задаваемого в операторе Option Base.

Массивы, размерности которых задаются с помощью предложения To в операторе Dim, Private, Public, ReDim или Static, могут иметь в качестве нижней границы индекса любое целое значение.

 

Функция UBound

 

Возвращает значение типа Long, содержащее максимально доступный индекс указанной размерности массива.

Синтаксис функции UBound

 

UBound(имяМассива[, размерность])

 

Синтаксис функции UBound содержит следующие элементы:

 

имяМассива – имя переменной массива, удовлетворяющее стандартным правилам именования переменных.

размерность – необязательный, Variant (Long) - целое число, указывающее размерность, верхнюю границу которой возвращает функция. Для первой размерности используется значение 1, для второй 2 и т.д. Если аргумент размерность опущен, подразумевается значение 1.

Функция UBound вместе с функцией LBound используется для определения размеров массива.

В следующем примере функция UBound используется для определения максимально доступного индекса указанной размерности массива.

 

Dim Upper

Dim MyArray(1 To 10, 5 To 15, 10 To 20) ' Объявляет переменные-массивы.

Dim AnyArray(10)

Upper = UBound(MyArray, 1) ' Возвращает 10.

Upper = UBound(MyArray, 3) ' Возвращает 20.

Upper = UBound(AnyArray) ' Возвращает 10.

 

Функция IsArray

 

Возвращает значение типа Boolean, показывающее, является ли переменная массивом.

 

Синтаксис функции IsArray

 

IsArray(имяПеременной)

 

Функция IsArray возвращает True, если переменная содержит массив; в противном случае возвращается False. Функцию IsArray используют для проверки значений типа Variant, содержащих массивы.

В следующем примере функция IsArray используется для проверки, является ли переменная массивом.

 

'Следующая строка описывает массив.

Dim MyArray(1 To 5) As Integer, YourArray, MyCheck

YourArray = Array(1, 2, 3)' Вызывает функцию Array.

MyCheck = IsArray(MyArray)' Возвращает True.

MyCheck = IsArray(YourArray) ' Возвращает True.

 

 

Оператор Erase

 

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

 

Синтаксис оператора Erase

 

Erase списокМассивов

 

где списокМассивов представляет имена одной или нескольких очищаемых переменных массивов, разделенных запятой.

Важно знать, имеет ли массив фиксированный размер (обычный массив) или является динамическим, поскольку оператор Erase выполняется по-разному, в зависимости от типа массива. Оператор Erase не освобождает память для массивов фиксированной длины. В табл. 5 показано как оператор Erase действует на элементы массивов фиксированной длины:

 

Таблица 5

 

Тип массива Действие Erase на массив фиксированной длины
Массив чисел Присваивает каждому элементу значение 0.
Массив строк (переменной длины) Присваивает каждому элементу значение пустой строки ("").
Массив строк (фиксированной длины) Присваивает каждому элементу значение нуля.
Массив типа Variant Присваивает каждому элементу значение Empty.
Массив типа, определяемого пользователем Присваивает каждому элементу значение, как отдельной переменной.
Массив объектов Присваивает каждому элементу специальное значение Nothing.

 

Для динамических массивов оператор Erase освобождает используемую память. Для того, чтобы из программы вновь стала возможна ссылка на динамический массив, необходимо переопределить размерности переменной массива с помощью оператора ReDim.

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

 

' Объявление переменных-массивов.

Dim NumArray(10) As Integer 'Массив значений типа Integer.

Dim StrVarArray(10) As String 'Массив строк переменной длины.

Dim StrFixArray(10) As String * 10 'Массив строк

'фиксированной длины.

Dim VarArray(10) As Variant 'Массив типа Variant.

Dim DynamicArray() As Integer 'Динамический массив.

ReDim DynamicArray(10) 'Занимает память.

Erase NumArray 'Каждый элемент становится равным 0.

Erase StrVarArray 'Каждый элемент становится пустой

' строкой ("").

Erase StrFixArray 'Каждый элемент становится равным 0.

Erase VarArray 'Каждый элемент становится пустым.

Erase DynamicArray 'Освобождает память, используемую массивом.



2020-02-04 555 Обсуждений (0)
Операторы и функции для работы с массивами. 0.00 из 5.00 0 оценок









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

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (555)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)