В Pascal существуют так называемые динамические массивы. При объявлении таких массивов в программе не следует указывать границы индексов:
1 2 3 4 5 6 7 |
Var A: array of integer; B: array of array of Char; C: array of array of array of real; |
Массив а — одномерный, b — двухмерную, с — трехмерный. Указание границ осуществляется в программе с помощью функции SetLenght (a, 3) A = nil — освобождает память.
Операции с Массивами
Типичными операциями при работе с массивами являются:
— вывод массива;
— введение массива;
— поиск максимального или минимального элемента массива;
— поиск заданного элемента массива;
— сортировка массива.
Вывод Массива
Под выводом массива понимается вывод на экран монитора (в диалоговое окно) значений элементов массива.
Если в программе необходимо вывести значения всех элементов массива, то для этого удобно использовать инструкцию For, при этом переменная-счетчик инструкции For может быть использована как индекс элемента массива.
Дорогой со структурированных типов (массивы, записи, множества, файлы) характеризуются множеством элементов, образующих этот тип. Каждый элемент, в свою очередь, может принадлежать структурированному типу, что позволяет говорить о возможной вложенности типов. В Pascal допускается произвольная глубина вложенности типов, однако суммарная длина каждого из них во внутреннем представлении не должна превышать 2Гбайт 2.
Массивы в Pascal во многом схожи с массивами в других языках программирования. Отличительная особенность массивов заключается в том, что все их компоненты — данные одного типа (возможно, структурированного). Эти компоненты можно легко упорядочить и обеспечить доступ к каждому из них простым указанием его порядкового номера, например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Type digit = array [0..9] of char; matrix = array [byte] of single; Var m: matrix; d: digit; I: integer; Begin . . . . . M [22] = ord (d [i-1]) / 10; . . . . . End. |
Описание типа массива задается следующим образом:
<Имя типа> = array [<сп. И все. типов>] of <тип>;
<Имя типа> — правильный идентификатор;
Array of — зарезервированное слово (массив с)
<Сп. И все. типов> — список из одного или нескольких индексных типов, разделенных запятыми; квадратные скобки, обрамляющие список — требование синтаксиса;
<Тип> — любой тип,
Как индексные типы можно использовать любые порядковые типы, кроме LongInt и типов-диапазонов с базовым типом LongInt.
Определить переменную как массив можно и непосредственно при описании этой переменной, без предварительного описания типа массива, например:
Var
a, b: array [1..10] of real;
Обычно как индексный тип используется тип-диапазон, в котором задаются границы изменения индексов. Потому что тип <тип>, следующего за словом of — любой тип, то он может быть в том числе и другим массивом, например
1 2 3 4 5 6 7 8 9 |
Type Matr = array [0..5] of array [-2..2] of array [char] of byte; Или (что аналогично): Type Matr = array [0..5, -2.2, char] of byte; |
В памяти компьютера элементы массива располагаются друг за другом так, что при переходе от младших адресов к старшим наиболее быстро меняется самый правый индекс массива, если
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Var A: array [1..2,1..2] of byte; begin A [1,1]: = 1; A [1,1]: = 2; A [1,1]: = 3; A [1,1] = 4; end. |
То в памяти последовательно друг за другом будут расположены байты со значениями 1,2,3,4.
В Pascal можно одним оператором присваивания передать все элементы одного массива другому массив того же типа, например:
1 2 3 4 5 6 7 8 9 10 11 |
Var A, b: array [1..5] of single; Begin ... A = b; End. |
Над массивами не определены операции отношений, нельзя, например, записать
If a = b then…,
Однако два массива можно сравнить поэлементно.