Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по дисциплине Объектно-ориентирован...doc
Скачиваний:
33
Добавлен:
01.07.2025
Размер:
14 Мб
Скачать
☆

3. Массивы

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

Объявление переменной как одномерного массива имеет вид:

var <имя массива>: array [<ограниченный тип>] of <тип элемент>;

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

Имеется одно оговоренное в документации ограничение для массивов: константы — массивы не могут содержать значений типа файлов.

Для любого массива определены следующие функции (см. табл. 11):

Таблица 11

Функции массивов

Length

Число элиментов массива

High

Наибольшее значение индекса

Low

Наименьшее значение индекса

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

Для числовых массивов определены функции (см. табл. 12):

Таблица 12

Функции для числовых массивов

Функция

Тип арумента

Тип

результата

Описание

MaxIntValue

array of integer

Integer

Возвращает максимальное значение элемента массива целых чисел

MinlntValue

array of integer

Integer

Возвращает минимальное значение элемента массива целых чисел

1

2

3

4

Max Value

array of double

Double

Возвращает максимальное значение элемента числового массива

MinValue

array of double

Double

Возвращает минимальное значение элемента числового массива

Sum

array of double

Extended

Возвращает сумму элементов массива

К символьным массивам применимы функции работы со строками.

Функции и процедуры в Object Pascal могут воспринимать в качестве параметров не только массивы фиксированного размера, но и так называемые открытые массивы, размер которых неизвестен. В этом случае в объявлении функции или процедуры они описываются как массивы базовых типов без указания их размерности.

Например:

procedure SuinArray(A:array of integer; var B: array of integer);

Массив, переданный как открытый, воспринимается в теле процедуры или функции как массив с целыми индексами, начинающимися с 0. Размер массива может быть определен функциями Length — число элементов и High — наибольшее значение индекса. Очевидно, что всегда High = Length - 1.

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

Открытые массивы этого вида разрешают, в отличие от всех других массивов, передавать в процедуру или функцию массив различных по типу значений. При передаче такого массива он объявляется как array of const.

Динамические массивы введены в Object Pascal только начиная с Delphi 4. Они отличаются от обычных статических массивов тем, что в них не объявляется заранее длина — число элементов. Поэтому динамические массивы удобно использовать в приложениях, где объем обрабатываемых массивов заранее неизвестен и определяется в процессе выполнения в зависимости от действий пользователя или объема перерабатываемой информации.

Объявление динамического массива содержит только его имя и тип элементов — один из базовых типов. Синтаксис объявления:

Var <имя> array of <базовый тип>

Например

var A: array of integer

объявляет переменную А как динамический массив целых чисел.

Удалить из памяти динамический массив можно одним из следующих способов: присвоить ему значение nil, использовать функцию Finalize или установить нулевую длину. Таким образом, эквивалентны следующие операторы:

А:= nil;

ИЛИ

Finalize(А);

или

SetLength(А,0);

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

Многомерный динамический массив определяется как динамический массив динамических массивов динамических массивов и т.д. Например:

var A2: array of array of integer;

определяет двумерный динамический массив.

Доступ к элементам многомерных динамических массивов осуществляется так же, как и для статических массивов. Например, А2[1,2] — элемент, лежащий на пересечении второй строки и третьего столбца (индексы считаются от нуля, так что индекс 1 соответствует второй строке, а индекс 2 — третьему столбцу).