Массивы и работа с ними.
Под массивом понимается фиксированная совокупность
однотипных элементов, расположенных в
определенном порядке.
Местоположение элемента в массиве определяется его номером или, иначе, - индексом. Тем самым обеспечивается упорядоченность элементов и возможность быстрого доступа к ним.
Каждый массив обладает по крайней мере тремя характеристиками: мерностью, размерностью и размером
.
Мерность определяется количеством измерений массива, т.е. количеством индексов, используемых при обращении к элементу массива.
В зависимости от числа индексов (измерений) массивы бывают одномернымии многомерными.
Например,
а). последовательность чисел
2 34 -5 7 0 13 -22
есть одномерный массив, состоящий из 7 элементов целого типа (и только). Присутствие в нем элемента со значением, допустим, 3.14 недопустимо, т.к. это число с дробной частью, т.е. вещественного типа. Обозначить данный массив можно, например, так:
МАS(7) или А(7).
При этом число 13 в массиве будет иметь индекс 6 и выражаться MAS[6] или А[6].
I-ый элемент обозначается MAS[I] или А[I].
Аналогично, последовательность слов
МИР РАК РИМ СОК КОТ ТОК
также является одномерным массивом, состоящим из 6-ти, но уже 3–х символьных элементов.
б). двумерный массив в нашем представлении есть матрица, где местоположение элемента определяется двумя индексами, первый из которых обозначает строку, а второй – столбец. Поэтому элемент М[2,4] будет располагаться на пересечении 2-й строки и 4-го столбца. А сама матрица, состоящая, например, из 6 строк и 5 столбцов, будет иметь следующее обозначение:
М(6,5)
в). трехмерный массив представляется кубом. Для идентификации отдельного элемента в нем уже применяются 3 индекса: первый и второй отображают, соответственно, строку и столбец плоскости (матрицы) куба, а третий – саму эту плоскость (матрицу). Поэтому отображение
К(3,4,5)
задает куб из 5-ти матриц, каждая из которых насчитывает 3 строки и 4 столбца.
А указание
К[2,1,3]
выводит нас на элемент, находящийся на пересечении 2-ой строки и 1-го столбца 3-й матрицы куба.
Если увеличивать число индексов, то можно оперировать более сложными массивами и представлять n-мерные пространства.
Размерность массива учитывает количество измерений и задается максимальной (верхней) границей диапазона изменения его индексов. В частности, для одномерного массива размерность будет совпадать с количеством элементов в нем. А для двухмерного размерность будет отражать количество строк и, отдельно, количество столбцов в соответствующей ему матрице.
Например, говорят: массив В, размерностью 4 на 6, подразумевая, что он двумерный и содержит 4 строки 6 столбцов. Т.е. В(4,6).
Размер массива определяет общее количество его элементов. При этом в расчет берутся все измерения массива. Так, размер двумерного массива В(4,6) равен 24.
Напомним, что важнейшей особенностью массива является фиксированное количество элементов в нем.
Чтобы использовать массивы в программе, их необходимо объявить.
Объявить массив– это означает сообщить компилятору:
- имя массива, которое определяет переменную с индексами;
- тип элементов массива;
- тип индексов элементов массива;
- размерность массива, равную количеству его индексных позиций;
- порядок позиционирования, т.е. нумерации элементов массива;
- количество элементов массива.
Полная форма объявления массива:
cписок тип
TYPE <имя типа > =ARRAY[<типов индексов >] OF< элементов >;
массива через запятую массива
VAR <имя массива> : < имя типа массива>;
Типы индексов указываются для каждого измерения и м.б. любыми простыми порядковыми, кроме LONGINT и его диапазона. На практике чаще всего используют интервальный или перечисляемый типы.
Тип элементов м.б. любым из допустимых, кроме FILE.
Сокращенная форма объявления:
имя cписок тип
VAR < массива> : ARRAY[<типов индексов >] OF< элементов >;
через запятую массива
Примеры объявления одномерных массивов:
a). полная запись:
TYPE
A=ARRAY[1..50] OF INTEGER;
B=ARRAY[10..20] OF REAL;
C=ARRAY[-5..15] OF BOOLEAN;
D=ARRAY[0..25] OF STRING[30];
E=ARRAY[-1..5] OF CHAR;
VAR MASA: A; => массив из 50 элементов целого типа
MASB: B; => массив из 11 элементов вещественного типа
MASС: С; => массив из 21 элемента булевского типа
MASD: D; => массив из 26 элементов строкового типа
MASE: E; => массив из 7 элементов символьного типа
Границы изменения индексов можно задать и так:
CONST I=-10000;
N=10000;
TYPE M= ARRAY[I..N] OF REAL;
б). сокращенная запись:
VAR MASA: ARRAY[1..50] OF INTEGER;
Примеры объявления многомерных массивов:
TYPE A1= ARRAY[1..20] OF INTEGER;
A2= ARRAY[1..10] OF A1;
VAR MSV: A2; => матрица, размерностью 10 на 20
Или:
TYPE A1= ARRAY[1..20] OF INTEGER;
VAR MSV: ARRAY[1..10] OF A1;
Или:
VAR MSV: ARRAY[1..10] OF ARRAY[1..20] OF INTEGER;
Или еще проще:
VAR MSV: ARRAY[1..10,1..20] OF INTEGER;
Следует учитывать, что, располагаясь в оперативной памяти, элементы массива образуют цепочку, в которой при последовательном переходе от элемента к элементу быстрее меняется самый правый (младший) индекс. Иными словами, в массиве T(2,3) элементы расположатся в следующем порядке:
Т[1,1] Т[1,2] Т[1,3] Т[2,1] Т[2,2] Т[2,3]
А в нашем представлении:
Т[1,1] Т[1,2] Т[1,3]
Т[2,1] Т[2,2] Т[2,3]
Для обращения к любому элементу объявленного массива предназначена переменная с индексом. По форме записи - это имя массива со списком из одного или нескольких индексов через запятую, заключенным в квадратные скобки.
Индекс может быть константой или выражением того же типа, что и тип индекса:
MASА[7] => обращение к 7–му (из 50-ти) элементу массива
MASA.
MSV[2,5] => обращение к элементу, лежащему на
пересечении 2-ой строки и 5-го столбца
матрицы MSV.
M1[i+1,j-2,k*3] => обращение к элементу трехмерного
массива M1, индексы которого вычисляются
согласно приведенным выражениям.
Замечания:
1. при обращении к элементам массива следует помнить, что количество индексных выражений /индексов/ должно равняться размерности массива.
2. значения индексов должны находиться в пределах их границ, заданных интервалом или перечислением.
3. значение вычисляемого индекса должно соответствовать типу индекса и не м.б. REAL.
Например, недопустимо:
Pole :=MSV[15, 25/(3+a), 4];
т.к.:
- первый индекс д.б. < = 10
- второй – дает в результате REAL
- третьего индекса вообще не должно быть
Можно описывать массивы с помощью компонент и индексов разных типов:
а).
TYPE DAY=(PND,VTR,SRD,CTV,PTN,SBT,VSK);
VAR DN: ARRAY[1..7] OF DAY;
Значениями элемента этого массива DN может быть один из 7 дней недели, задаваемых перечисляемым типом DAY, т.е допустимо:
DN[5]:=CTV;
б).
TYPE GR=(EIS_111,EIS_112,EIS_211,EIS_212,EIS_311,EIS_312);
ML_KURS=(1..3);
VAR STUD: ARRAY[GR, ML_KURS] OF INTEGER;
Тогда,
STUD[EIS_112,1]:=23; => число студентов в группе.