Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка DELPHI.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

Массивы

Массив представляет собой фиксированное количество однотипных компонентов, снабженных индексами. Массивы соответствуют, например, векторам (одномерный массив), матрицам (двумерный массив) и др.

Статические массивы

Тип статического массива объявляются следующим образом: Type <Имя> = Array[<тип индекса>] of <тип элеметов>; Например, Type Vekt = Array [1..10] of byte;

В данном случае задан одномерный массив (вектор) состоящий из 10-ти элементов целого типа byte. Отдельные элементы этого массива в программе определяются с помощью индексов, например, если объявлено Var X: vekt;, то в выражениях можно использовать X[1], X[2], ... , X[10]. В квадратных скобках указывается значение индекса, т.е. номер компонента в массиве. Отсчет номеров ведется так, как указано в индексе при объявлении. Пусть объявлено: Var Z: array [-2..2] of integer; - это значит заданы элементы Z[-2], Z[-1], Z[0], Z[1], Z[2] целого типа integer.

В общем случае тип индекса может быть любым порядковым типом. Так, в примере Var Y: array [‘A’..’Z’] of integer; объявлено 26 элементов (по количеству букв в английском алфавите): Y[‘A’], Y[‘B’], ..., Y[‘Z’], выделено 26 ячеек памяти, в которые можно записывать данные типа integer, например Y[‘C’]:=5;. Информацию можно также считывать из этих ячеек памяти - A:=cos(PI + Y[‘C’]);.

Индекс можно определять и таким способом: Var Y:array[Char] of single;, т.е. определено 256 ячеек памяти, в которые можно записывать вещественные числа. Однако имеется ограничение при объявлении массивов: размер памяти, занимаемый одним массивом не должен превышать 2 Гбайта. Так объявление var X:array[LongInt] of integer; синтаксически верно, но превышен размер памяти, который должен быть выделен для этого массива (более 2 Гбайт).

Аналогичные правила действуют и для двумерных массивов, – например, объявление Var A: array[1..2, 1..3] of double; определяет двумерный массив (матрицу), который содержит 2 строки и 3 столбца (всего 6 элементов). Эти элементы записываются в памяти следующим образом: A[1,1], A[1,2], A[1,3], A[2,1], A[2,2], A[2,3], т.е. сначала первая строка матрицы, а затем вторая. Этот массив можно определить и так: A: array[1..2] of array[1..3] of real; или

Type Vekt = array[1..3] of real;

Var A: array[1..2] of vekt;

Разрешается объявлять и использовать многомерные массивы (до семимерных включительно).

Для массивов можно задавать типизированные константы, т.е. задавать начальные значения элементам массива. Например, требуется задать в памяти значения элементов вектора q = (5.2, 6.0, -3.1, 0.8). Это можно осуществить следующим образом: Const q:array[1..4] of real=(5.2,6.0,-3.1,0.8);.

Начальные значения для двумерного массива, например матрицы , можно задать следующим способом:

Type Matr= array[1..2, 1..3] of byte;

Var R:Matr=((3, 7, 5), (8, 11, 6));

При задании значения индекса для элемента какого-либо массива можно использовать выражение соответствующего типа, указанного при объявлении. При этом необходимо следить, чтобы значение этого выражения не выходило за объявленные границы. Например, для элемента объявленной выше матрицы R можно записать R[Succ(i),Pred(j)] (табл. 2), необходимо лишь, чтобы выполнялись для заданной матрицы R условия: 1 Succ(i) 2 и 1 Pred(j) 3.

Если задан массив символов, то типизированную константу можно определять следующим образом:

Const C: array[1..5] of Char= ‘abcde’;

Если два или более массивов имеют один тип, т.е. объявлены с помощью одного описания, то эти массивы можно присваивать друг другу. Например, если объявлено

Type V= array[1..5] of real;

Var A,B:V;, то можно записывать A:=B;.

Однако при следующем описании тех же переменных A и B

Var A:= array[1..5] of real; B:= array[1..5] of real;

записывать A:= B; нельзя.