Опубликован: 01.04.2010 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский университет "Высшая Школа Экономики"
Лекция 4:

Переменные и типы данных

< Лекция 3 || Лекция 4: 123 || Лекция 5 >

Массивы

Переменные можно объединять в массивы. Массив - это совокупность переменных одного типа.

Преимущества:
  • Вместо нескольких однотипных переменных используется одна переменная.
  • Можно применять групповую обработку элементов массива.

Каждый массив имеет имя - идентификатор. Переменные, входящие в массив, называются элементами массива. Любой элемент массива обозначается переменной с индексом, например, A(5). Другими словами отдельный элемент массива определяется своей позицией (индексом) в массиве. Можно сказать, что массив это именованная совокупность переменных одного типа, которые различаются значениями своих индексов.

С понятием массива связано понятие размерности. Чаще всего используются одномерные массивы (векторы или строки) и двумерные массива (матрицы). Максимальное количество измерений массива - 60.

Примеры массивов

Ежедневная утренняя и вечерняя температура воздуха в течение месяца представляется двумерным массивом из 31 строки и 2 столбцов, а эта же температура в течение года является уже трехмерным массивом 12x31x2.

Перечень десяти дисциплин по каждой из пяти специализаций представляется двумерным массивом из 5 строк и 10 столбцов.

Важно:
  • Элементы массива имеют одинаковые характеристики (тип, размер и т.д.).
  • Элементы массива могут использоваться во всех конструкциях языка, в которых допускается использование обычных переменных.
  • Индекс элемента массива - это число (положительное, отрицательное или 0).
  • Количество индексов элемента массива должно соответствовать количеству измерений массива: первый индекс соответствует первому измерению, второй индекс - второму и т.д.
  • Для указания индекса можно использовать переменные или выражения. При этом значение выражения округляется до ближайшего целого числа.
  • Значение каждого индекса имеет нижнюю и верхнюю границу. Если специально не указано другое значение, нижней границей индекса массива является 0.
  • Инструкция Option Base 1, размещенная в области Declarations, устанавливает нижний индекс всех массивов в единицу.

Массив должен быть обязательно объявлен. Синтаксис объявления массива:

Dim varname(subscripts) As type
  • varname - имя массива;
  • subscripts - индексы измерений массива;
  • type - тип элемента массива.

Для каждого индекса измерения ( subscripts ) можно указать нижнюю и верхнюю границы (граничная пара) в виде lower to upper, где обе границы суть целые числа или выражения, результат вычисления которых есть число. Нижняя граница может быть опущена, тогда она предполагается нулевой, если инструкция Option Base не указывает на другое. Индексы каждого измерения отделяются друг от друга запятой. Например, объявление Dim A (1 To 5, 2 To 17) определяет двумерный массив A из пяти строк с индексами от 1 до 5 и 16 столбцов с индексами от 2 до 17, всего 80 элементов. Запись A(3,10) указывает на девятый элемент третьей строки.

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

Пример

Создать массив, значение каждого элемента которого равно индексу элемента.

Одномерный массив A имеет восемь элементов с индексами от 0 до 7.

Оператор присваивания значения и оператор распечатки значения записаны на одной строке через двоеточие.

Оператор присваивания значения и оператор распечатки значения

Рис. 4.2. Оператор присваивания значения и оператор распечатки значения
Динамические массивы

Если в момент объявления массива неизвестен его размер или же в процессе выполнения программы требуется изменить размеры массива, то массив изначально необходимо объявить как динамический. При объявлении динамического массива не указывается его размерность, например, Dim A(). Далее в программе должны быть установлены размеры массива при помощи оператора Redim.

Синтаксис:

ReDim [Preserve] varname (subscripts) [As type]
  • Preserve - ключевое слово, позволяющее сохранить существующие элементы массива;
  • varname - идентификатор массива;
  • subscripts - индексы массива;
  • type - тип элементов массива.
Внимание:
  • Можно изменить только верхнюю границу индекса массива, Попытка изменения нижней границы индекса приведет к ошибке.
  • При переопределении динамического массива без ключевого слова Preserve все ранее определенные элементы массива очищаются. Включение Preserve в оператор ReDim сохраняет существующие элементы массива, если размерность массива увеличивается. Если размерность массива уменьшается, то данные, находящиеся вне границ переопределенного массива теряются.
  • Если массив многомерный, то при переопределении массива может быть изменена только верхняя граница последнего измерения.
  • Ключевое слово Preserve не может использоваться для изменения количества измерений массива.
  • Не используйте оператор Redim для изменения типа элементов массива.

Для определения границ динамического массива используются функции Lbound (индекс нижней границы) и Ubound (индекс верхней границы).

Синтаксис:

Lbound (arrayname [,dimension])
Ubound (arrayname [,dimension])
  • arrayname - имя массива,
  • dimension - номер измерения массива.

Для рассмотренной выше процедуры оператор Debug.Print Lbound(A,1) распечатает значение 0, а оператор Debug.Print Ubound(A,1) распечатает значение 7.

Пример

В процедуре запрашивается ввод целого числа. Создается массив из четного числа элементов, содержащих четные значения, меньшие или равные введенному числу.

Введенное число нацело делится на два. Результат - количество четных чисел, меньших или равных веденному числу. Если результат является четным числом, количество элементов в переопределяемом массиве равно этому числу; если нечетным числом, то на единицу меньше результата деления.

Введено число 125. Результат выполнения процедуры приведен ниже.

Создается массив из четного числа элементов, содержащих четные значения, меньшие или равные введенному числу

Рис. 4.3. Создается массив из четного числа элементов, содержащих четные значения, меньшие или равные введенному числу

В процедуре используется условный оператор If, который определяет размер массива b в зависимости от четности результата деления нацело введенного числа. Функция Ubound используется для определения количества элементов созданного массива.

Пользовательский тип

Можно определить данные, состоящие из нескольких логически связанных между собой элементов - структура данных ( User-Defined Data Type ). Каждый пользовательский тип описывается с помощью инструкции Type в области Declarations. Завершение определения пользовательского типа данных - инструкция End Type. Например:

Type sqn
  sqn_zero As Integer
  sqn_unity As Integer
End Type
Важно:
  • Определяемые пользователем типы данных могут включать в себя один или несколько элементов любого типа данных, в том числе массивы и определенные пользователем типы данных.
  • Не допускается номеров строк и меток строк в блоке Type...End Type.
  • Можно создавать массивы типов данных, определяемых пользователем. При описании массива фиксированного размера с пользовательским типом данных нельзя использовать переменные для задания размерности массива.
  • Структура пользовательского типа данных может быть многоуровневой. Обращение к элементу структуры осуществляется при помощи составного имени для исключения неоднозначности. Полное составное имя включает в себя имена структуры и всех подструктур, в которые входит определяемый элемент. Имена подструктур должны следовать в порядке иерархии, т.е. в том же порядке, в котором они определены в структуре.
  • Для структур в целом применимы только операторы присваивания, элементы структур можно использовать в выражениях, соответствующих типу элемента.
< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Дмитрий Денисов
Дмитрий Денисов

Еще раз повторяю вопрос  - отправил договор и сканы документов по почте - в начале августа, до  5 го, внес предоплату - летом действовала скидка - чтобы пройти курс в августе, но я уезжал в Москву. По возвращению - и  в течение месяца - никакого ответа, никаких зачислений, ничего. Как проверить, пришли ли мои документы в Интуит, предоплата, почему нет зачисления.

Дмитрий Денисов
Дмитрий Денисов

Как записаться на курс, оплатить, не ориентируюсь в программе.

Ранее у Вас учился.

Работаю преподавателем, есть справка. Как получить скидку, т.е. оплата 2000


 

Елизавета Cафронова
Елизавета Cафронова
Россия, Выкса, НИТУ МИССиС
Иван Чуприков
Иван Чуприков
Россия, пгт. Чульман