Лекция
Сложные типы данных
Сложные типы данных характеризуются типами их компонентов и методом их объединения. К сложным (структурированным, составным) типам данных (агрегатам) относят массивы, записи, множества и файлы.
Массивы
Записи
Множества
Массивы
Массив - это n-мерная совокупность однотипных элементов. В массивы можно объединить данные любого типа. Данные объединяют в массивы в случае, если надо выполнить одни и те же действия над определенным количеством однотипных значений. Массивы отображают следующие математические понятия:
вектор с элементами ai для i = 1n; на языке Паскаль это одномерный массив;
матрица с элементами a i, j ; на языке Паскаль - это двумерный массив;
пространство Ai,j,k...; на языке Паскаль - это n-мерный массив, где n - количество его измерений (индексов).
Массивы часто используют для:
численных методов решения систем алгебраических и дифференциальных уравнений;
формирования совокупностей однотипных значений: исходных данных, промежуточных и конечных результатов.
Объявление массивов определяет атрибуты, характерные только для массивов, размерность и размер:
размерность (количество измерений) массива определяет количество ин дексов при обращении к элементу массива;
размер массива - это количество его элементов с учетом всех его измере ний.
Размерность массива на языке Паскаль не ограничена. Однако общий объем ОП массива должен быть не более 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.
Объявление массивов отвечает на следующие вопросы транслятора:
какие переменные могут быть с индексами;
сколько должно быть индексов при обращении к элементу массива;
какие допустимы значения индексов в соответствии с определенными для них границами;
какой объем ОП нужен массиву.
Объем ОП, необходимой для размещения массива, определяется из объема ОП, требующегося для размещения одного элемента, и из размера массива, т. е. общего количества его элементов. Например, для 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 элементу трехмерного массива.
При обращении к элементам массивов индексами могут быть выражения соответствующего типа. Значение выражения индекса вычисляется перед обращением к элементу массива, и полученный результат используется в качестве индекса.
Записи
В задачах экономики и управления часто используются данные в виде таблиц, каждая строка которых может содержать разнотипные элементы. Такие данные представляют в виде совокупностей (структур) данных. На языке Паскаль их называют записями. В составе записи (например, с данными одной строки таблицы) могут быть скалярные типы, массивы и записи такого же или другого типа. Кроме того, на языке Паскаль можно использовать массивы записей.
Запись - это структура данных, состоящая из фиксированного количества элементов, называемых полями. Поля могут быть различных типов. Записи -наиболее общий и гибкий тип данных Паскаля. Они могут быть постоянной (фиксированной) и переменной структуры (вариантные записи). Ввод-вывод и обработка записей в Паскале может производиться только поэлементно. Допускается копирование записей одного типа из одной переменной в другую с помощью оператора присваивания.
