Сложные типы данных характеризуются типами их компонентов и методом их объединения. К сложным (структурированным, составным) типам данных (агрегатам) относят массивы, записи, множества и файлы.
1. Массивы
2. Записи
3. Множества
Массив - это n-мерная совокупность однотипных элементов. В массивы можно объединить данные любого типа. Данные объединяют в массивы в случае, если надо выполнить одни и те же действия над определенным количеством однотипных значений. Массивы отображают следующие математические понятия:
1) вектор с элементами ai для i = 1¸n; на языке Паскаль это одномерный массив;
2) матрица с элементами a i, j ; на языке Паскаль - это двумерный массив;
3) пространство Ai,j,k...; на языке Паскаль - это n-мерный массив, где n - количество его измерений (индексов).
Массивы часто используют для:
1) численных методов решения систем алгебраических и дифференциальных уравнений;
2) формирования совокупностей однотипных значений: исходных данных, промежуточных и конечных результатов.
Объявление массивов определяет атрибуты, характерные только для массивов, размерность и размер:
1) размерность (количество измерений) массива определяет количество ин дексов при обращении к элементу массива;
2) размер массива - это количество его элементов с учетом всех его измере ний.
Размерность массива на языке Паскаль не ограничена. Однако общий объем ОП массива должен быть не более 65520 байт.
В Паскале массивы называют также регулярными типами данных. Массив - это совокупность фиксированного количества компонентов (элементов) одного и того же типа. Тип элементов массива называется базовым типом. Он может быть любым: простым или сложным. Каждый элемент массива имеет индекс, который определяет его местоположение в ОП. Элементы массива упорядочены по индексам. Мощность индекса определяется количеством элементов массива по данному измерению. Тип индексов может быть любым простым порядковым (ординальным) типом данных, кроме стандартного типа LONGINT и его диапазона. В том числе он может быть перечисляемым или диапазонным типом.
Массивы можно определить в разделах TYPE или VAR.
Форма объявления массива:
ТYРЕ Т = ARRAY [ T1 ] OF T2 ;
где Т - имя типа массива;
Т1 - тип индексов в виде списка типов, по одному для каждого измерения; обычно тип индексов диапазонный; Т2 - базовый тип: тип элементов массива.
Примеры объявления массивов данных различных типов:
TYPE ТА = ARRAY [1 .. 10] OF INTEGER; { Тип массива А }
MN = SET OF 2 ..100; { Тип множества }
VAR А : ТА; { Массивы данных: А - целого типа }
В : ARRAY [1 .. 20] OF REAL; { В - вещественного }
С : ARRAY [1..10,1..20] OF REAL;{С - двумерный, веществ.}
D : ARRAY [-10 .. 10] OF BOOLEAN; { D - логического }
E : ARRAY [0 .. 30] OF CHAR; { E - символьного }
F : ARRAY [1 .. 15] OF STRING[30]; {F- строковых данных}
G : ARRAY [1 .. 20] OF MN; { G - множеств }
Тип массива А и множества MN в примере определен в разделе TYPE. Остальных массивов - в разделе VAR.
Объявление массивов отвечает на следующие вопросы транслятора:
1) какие переменные могут быть с индексами;
2) сколько должно быть индексов при обращении к элементу массива;
3) какие допустимы значения индексов в соответствии с определенными для них границами;
4) какой объем ОП нужен массиву.
Объем ОП, необходимой для размещения массива, определяется из объема ОП, требующегося для размещения одного элемента, и из размера массива, т. е. общего количества его элементов. Например, для 20 элементов типа REAL надо 20 * 6 = 120 байт ОП.
Так как тип элементов массива может быть любой, компонентами массива могут быть структурированные данные: массивы, записи, множества или файлы. Например:
TYPE В = ARRAY [ 1 .. 20 ] OF REAL ; VAR A : ARRAY [ 1 .. 30 ] OF В ;
To же объявление можно выполнить по-другому:
VAR A : ARRAY [ 1 .. 30 ] OF ARRAY [ 1 .. 20 ] OF REAL ;
VAR A : ARRAY [ 1 .. 30, 1 .. 20 ] OF REAL ;
Последний вариант объявления можно считать наиболее компактным. Пример. Объявить массив целых чисел, содержащий количество дней любого месяца года:
TYPE MES = (YAN,FEB,MAR,APR,MAI,IUN,IUL,AUG,SEN,OKT,NOV,
DEC);
X = ARRAY [ MES ] OF BYTE;
VAR А, В : X ;
С : BYTE ;
BEGIN В [YAN] := 31 ; A [FEB] := 28;
С := A [FEB] ; ...
END.
В примере тип индексов массивов А и В определен как перечисляемый тип MES.
В ОП элементы массива располагаются так, что при переходе от элемента к элементу наиболее быстро меняется самый правый индекс массива. Таким образом, матрица располагается в ОП по строкам. Например:
VAR A : ARRAY [1..4] OF REAL;
В : ARRAY [1..2, 1..3] OF REAL;
В ОП элементы этих массивов располагаются в последовательности:
A1 A2 A3 A4 B1,1 B1,2 B1,3 B2,1 B2,2 B2,3
Обращение к элементу массива формируется в виде имени массива и списка индексов в квадратных скобках. Например:
A[i] - для обращения к ai элементу одномерного массива;
B[i, j] - для обращения к bi,j элементу двумерного массива;
c[i,j,k] - для обращения к Ci,j,k элементу трехмерного массива.
При обращении к элементам массивов индексами могут быть выражения соответствующего типа. Значение выражения индекса вычисляется перед обращением к элементу массива, и полученный результат используется в качестве индекса.