Упакованные массивы
Многомерные массивы
До сих пор мы рассматривали массивы, каждый элемент которых содержал один индекс. Такие массивы называют одномерными.
Из многомерных массивов в математике наиболее часто используют двумерные массивы – матрицы.
Описание матрицы 3 х 4:
1) Type T = Array [1..3,1..4] of Integer;
Var A:T;
2) Type T = Array [1..3] of Array [1..4] of Integer;
Var A:T;
Пример:
Type T1 = Array [1..4] of Integer;
T = Array [1..3] of T1;
Var A:T;
B: T1;
Здесь сначала описывается тип одной строки Т1, а затем, через тип строки Т1, описывается тип всей матрицы Т. В разделе переменных указывается, что А является двумерным массивом (т.е. матрицей), а В – одномерным массивом.
Пример: Найти сумму положительных элементов массива D(n,m)
n£10, m£20.
Program Summa;
Const n=10;
m=20;
Var i, j:Integer;
Sum: Real;
D: Array [1..n,1..m] of Real;
Begin
Sum: = 0;
For i: = 1 to n do
For j: = 1 to m do
Begin
Read (D[i,j]);
If D[i,j] > 0 then Sum: = Sum + D[i,j];
End;
Writeln (‘Sum=’,Sum);
End.
Пример: Даны две матрицы: A[N*M], B[N*M].
Найти их сумму C[N*M]= A + B.
Cij = aij + bij
Program Summa;
Const N=3; (*количество строк*)
M=5; (*количество столбцов*)
Type Mat = Array [1..N,1..M] of Real;
Var A, B, C: Mat;
I: Integer; (*индекс строки*)
J: Integer; (*индекс столбца*)
Begin
Writeln (‘Ввести А, В’);
For I: = 1 to N do
Begin
For J: = 1 to M do
Begin
Read (A[I,J],B[I,J]);
C[I,J]:= A[I,J] + B[I,J];
End;
Readln;
End;
Writeln (‘Матрица С’);
For I: = 1 to N do
Begin
For J: = 1 to M do
Write (C[I,J]:3:1, ‘ ‘:2);
Writeln;
End;
End.
Как правило, одно целое число или один символ занимают в памяти ЭВМ два байта. В то же время для изображения символа достаточно одного байта. С целью экономии памяти машины в языке программирования Паскаль введено понятие упакованного массива. Элементы упакованного массива хранятся по два в двух байтах ЭВМ. И хотя при этом экономится место в памяти, но увеличивается время доступа к компонентам массива.
Элементы упакованного массива используются в программе точно так же, как элементы не упакованного массива. Только память машины при этом автоматически выделяется меньше.
Например, массивы А и АР описаны как
Var AP: Packed Array [1..3] of Boolean;
A: Array [1..3] of Boolean;
Обычнвй м упакованный массивы идентичны в смысле объема и характера хранимой информации, но различаются способами представления в памяти ЭВМ.
Упакованный массив можно описывать в разделе переменных или с использованием раздела типов.
Описание в разделе типов:
Type имя типа = Packed Array [имя индекса] of тип элемента;
Var имя переменной:имя типа;
Здесь служебное слово Packed указывает на то, что массив данных является упакованным.
К упакованным символьным массивам в языке программирования Паскаль относится строки символов, которые задаются либо в разделе операторов, либо в разделе констант (строки символов, а не символьные строки String, о которых речь пойдет дальше). Как известно, тип константы однозначно определяется ее записью. Поэтому если, например, в разделе констант определена константа S=’end’, то она принадлежит к типу: Packed Array [1..3] of Char.
Считается, что символьные константы имеют тип упакованных массивов:
Packed Array [1..n] of Char;
где n - длина строки.
Символьные массивы и константы могут участвовать в операциях присваивания и сравнения.
Пусть, например, описание символов массива имеет вид:
Type Mas= Packed Array [1..7] of Char;
Var A:Mas;
Тогда, можно записать такой оператор:
A:=’ZADACHA’;
Если к строкам и упакованным символьным векторам применяют операции сравнения, то при этом аргументы обязательно должны содержать одинаковое количество символов, т.е. их типы д/б идентичными. Операции сравнения выполняются посимвольно, слева направо.