| 6.  Структурированные типы данных Структурированные типы данных определяют наборы однотипных или разнотипных компонент. Типы компонент образуются из других типов (простых, структурированных, указателей и т. д.) данных. В языке Паскаль существуют следующие структурированные типы.
 тип-массив;тип-запись;тип-множество;тип-файл.
 В Turbo Pascal имеется еще два структурированных типа - тип-строка string и тип-строка PChar, являющиеся разновидностями массива.	 В дальнейшем объекты структурированных типов для краткости    будут называться теми же именами, что и их типы, без указания слова  "тип": массив, запись, множество, файл, строка.	 В стандарте языка существуют упакованные (packed) и неупакованные структурированные типы. В Turbo Pascal слово packed, характеризующее упакованный тип, не оказывает никакого влияния; в случае, когда это возможно, упаковку данных осуществляется автоматически. 6.1.      МассивТип-массив представляет собой фиксированное количество упорядоченных однотипных компонент, снабженных индексами.  Он может быть,  одномерным и  многомерным. Чтобы задать тип-массив, используется  зарезервированное слово array, после которого следует указать тип индекса   (индексов)   компонент  (в квадратных скобках) и далее после слова of - тип самих компонент. type<имя типа>  = аггау[<тип  индекса(индексов)>]   of <тип компонент>;
 Пример. typeArr = array[1..3]   of  Real;
 {тип-массив  из  3  вещественных чисел}
 Matrix = array[1..3,  1..2]   of  Integer;
 {тип - двумерный массив  целых чисел,   состоящий из 3 строк и 2  столбцов}
 Введя тип-массив, можно затем задать переменные или типизированные константы этого типа.	 Размерность массива может быть любой, компоненты массива могут быть любого, в том числе и структурированного, типа, индекс (индексы) может быть любого порядкового типа, кроме типа Longint. При задании значений константе-массиву компоненты указываются в круглых скобках и разделяются запятыми, причем, если массив многомерный, внешние круглые скобки соответствуют левому индексу, вложенные в них круглые скобки - следующему индексу и т. д. Так, для введенных выше типов можно задать, например, следующие переменные и константы: varM1,   M2:   Arr;
 Matr: Matrix;
 const
 М3: Arr = (1 , 2, 3) ;
 Mat: Matrix = ((1, 2), (3, 4), (5, 6));
 Последняя константа соответствует следующей структуре: Примечание.	Тип-массив можно вводить непосредственно и при определении соответствующих переменных или типизированных констант. Например: varMl, M2: array[1..3] of Real;
 Matr: array[1..3, 1..2] of Integer;
 Здесь определены те же массивы, что и в предыдущем примере.  При таком объявлении массивов следует помнить, что их типы не будут идентичными никаким другим типам, даже если они имеют одинаковую структуру. Поэтому передавать их как параметры в подпрограмму нельзя (см. п. 10.3), нельзя также присваивать им значения других массивов (и наоборот), даже если их структуры совпадают. Доступ к компонентам массива осуществляется указанием имени массива, за которым в квадратных скобках помещается значение индекса (индексов) компоненты. В общем случае каждый индекс компоненты может быть задан выражением соответствующего типа, например:  М1[2] ,Matr[X,   Y],
 M2[Succ(I) ]   и  т.   д.
 Одному  массиву   можно  присвоить  значение  другого  массива,   но  только идентичного типа. Так, если заданы следующие массивы: var  А,   В:   array[1..5]   of  Integer;С:   array[1..5]   of  Integer;
 то допустим следующий оператор:  A   := В;  С другой стороны, оператор С   := А;  недопустим, т. к. массивы А и С - не идентичных типов. Имеются некоторые отличия в.работе с одномерными массивами символов (не путать с величинами типа string - см. п. 6.2). Так, типизированным константам этого вида можно присвоить значение как обычным строковым константам, указав строку символов в апострофах, например constA:   array[1..5]   of  Char='aaaaa';
 В:   array[1..3]   of   Char='bbb';
 Для таких массивов, как и для строк, можно использовать операции сравнения (даже если они не идентичных типов и даже если имеют различный размер) и конкатенации (объединения) - см. п. 6.2. Их можно использовать в операторах вывода Write и WriteLn. Например, для введенных выше массивов можно написать if A   >   В  thenWriteLn(A)
 else
 WriteLn(B);
 
 
 |