Структурированный тип данных – массивы.
( слайд 1) Структурированные типы данных определяют наборы однотипных или разнотипных компонентов; при этом каждый из них образуется из других типов данных – простых или структурированных. То есть переменная или константа структурированного типа всегда имеет несколько компонентов. Каждый компонент, в свою очередь, может принадлежать структурированному типу, т.е. получается как бы вложенность типов. В Турбо-Паскале допускается произвольная глубина вложенности типов, однако суммарная длина любого из них во внутреннем представлении не должна превышать 65520 байт.
В TP 4 типа структурированных данных:
массивы (тип-массив);
файлы (тип-файл);
записи; (тип-запись);
множества (тип-множество);
1. Основные определения. ( слайд 2)
Массивом называется упорядоченная последовательность однотипных переменных, обозначенных одним именем.
Элементы массива являются его компонентами. Все компоненты относятся к одному типу, его называют типом компонент; количество их фиксировано.
Каждый элемент может быть явно обозначен с помощью имени переменной массива, за которым в квадратных скобках следует индекс.
Индекс – это величина, характеризующая положение элемента относительно начала массива; индексом может быть произвольное выражение порядкового типа, заключенное в квадратные скобки.
b[1], b[2], b[10] - элементы массива B;
c[i+1], c[i*5-2] - элементы массива C;
d[2,5], d[1,3] - - элементы массива D;
Массивы бывают одномерными и многомерными. Количество индексов в квадратных скобках определяется размерностью массива ( a[1], b[2,5] );
Размерность массива практически может быть любой.
Каждому массиву, используемому в программе, отводится место в памяти. Но в отличие от простых переменных массиву отводится не одна ячейка, а последовательность расположенных друг за другом ячеек, в каждую из которых записывается значение соответствующего элемента.
Время доступа к любому элементу массива не зависит от значения индекса – это прямой доступ.
2. Описание массивов. ( слайд 3)
Описать массив – это значит задать:
имя массива
число элементов
тип элементов
тип индексов
Описать массив можно двумя способами: (слайд 4)
1). Тип – массив является типом, определяемым пользователем, его можно определить в разделе описания типов.
Формат записи:
TYPE
<имя типа> = ARRAY [< тип индексов >] OF <тип элементов >;
где:
ARRAY, OF - кодовые слова (массив …из);
<имя типа> : правильный идентификатор;
<тип индексов> : список из одного или нескольких индексных типов, разделенный запятыми;
<тип элементов>: любой тип ТР;
[ ] – квадратные скобки, обрамляющие список индексов, определяют требования синтаксиса языка.
Вместо квадратных скобок [ ] можно использовать круглые скобки с точками (. .);
Индекс может быть любого порядкового типа, кроме Longint. Обычно в качестве индексного типа используют тип-диапазон, в котором задаются границы изменения индексов. Очевидно, что нижняя граница не может превосходить верхнюю. Введя тип-массив, можно затем задать переменные или типизированные константы этого типа. ПРИМЕРЫ
Тип-массив определяется в разделе описания типов.
Описание одномерных массивов .
TYPE
mass = Array[1..5] of integer;
M1= array[1..10] of real;
M2 = array[1..3] of char;
M3 = array[1..5] of byte;
Var
a1, b1,c1 : mass;
a2 : M1;
b2 : M2; c2 : M3;
Размерность реальных массивов не должна превышать верхней границы, указанной в описании типа.
Описание двумерных массивов.
TYPE
Atype = Array[1..5,1..3] of integer;
Btype = array[1..4,1..4] of real;
Var
a3 : Atype; b3 : Btype;
При задании значений константе- массиву компоненты указываются в круглых скобках и разделяются запятыми, причем, если массив многомерный, внешние круглые скобки соответствуют левому индексу, вложенные в них круглые скобки – следующему индексу и т.д. При этом все компоненты массива должны быть заполнены. ( слайд 7)
Пример. Типизированная константа использует тип-массив, объявленный ранее.
TYPE
mass = array[1..5] of integer;
matr = array[1..3,1..4] of real;
CONST
M1 : mass = (2, 4, 6, 8,0);
M2 : mass = (1, 5, 7, 0,0);
X : matr = ((2., 3.5, 4.6, -5.2),
(.5, 1.3, 7.1, 12.),
(6.8, 0.1, -5.4, 2.1));
Y : matr = ((3., 6., 4., 0),
(5., 1., 7., 0),
(0, 0, 0. 0));
{ X(3x4), Y(2x3), M1(4), M2(3) }
2). Тип-массив можно вводить непосредственно при определении переменных или типизированных констант.
ПРИМЕРЫ:
Тип-массив задается непосредственно в разделе описания переменных VAR.
( слайд 8)
TYPE
mass = array[1..5] of integer;
CONST n=4; m=10;
Var
a1, b1, c1 : array[1..5] of integer;
a5 : mass;
a2 : array[1..m] of real;
a3 : array[1..5,1..3] of integer;
b3 : array[1..n,1..n] of real;
Для массивов идентичного типа, т.е. описанных одним TYPE, передать все элементы из одного массива в другой можно единственным оператором.
Допустим оператор b1 := a1;
{после этого присваивания все 5 элементов массива b1 получат те же значения, что и в массиве a1}
При таком объявлении массивов a1, a5 следует помнить, что их типы не будут идентичными, даже если они имеют одинаковую структуру. Поэтому передавать их как параметры в подпрограмму нельзя, нельзя также присвоить одному массиву значения другого массива – в таком случае допустимо лишь покомпонентное присваивание.
Недопустим оператор a5 :=a1;
4. Тип-массив задается непосредственно в разделе описания констант. ( слайд 9)
CONST
a1 : array[1..4] of integer = (1, 4, 3, 7);
a2 : array[1..2,1..2] of real = ((1., 4.),
(5., 7.));
a3 : array[1..3] of char = (‘n’, ‘o’, ‘t’);
В отличие от простых констант типизированные константы представляют собой инициализированные переменные, которые могут использоваться в программах наравне с обычными переменными.
5.Встроенный тип элементов. ( слайд 10)
Так как < тип элементов >, идущий за кодовым словом OF, - любой тип Турбо-Паскаля, то он может быть и другим массивом, например:
a).Type
matr = array[1..4] of array[1..3] of real;
b). Type
mass = array[1..3] of real;
matr = array[1..4] of mass;
Var
x, y : matr;
sr : mass;
X, Y - матрицы размерностью не
более (4x3) .
SR – одномерный массив размерностью
не выше 3.
c). Более компактная запись для a) и b):
TYPE
matr = array[1..4,1..3] of real;