
- •Раздел 10. Структурные типы
- •10.1. Массивы
- •10.1.1. Задание массивов
- •Voz [f] Godrozd [f].
- •Voz [Ivanov] Voz [Petrov]
- •10.1.2. Действия над элементами массивов
- •10.1.3. Действия над массивами
- •10.1.4. Типизованные константы типа массив
- •10.1.5. Уплотнение структурных данных в памяти
- •10.2. Строковые данные
- •10.2.1. Строковые константы
- •10.2.2. Строковые переменные
- •10.2.3. Встроенные функции, определенные над данными строковых типов переменной длины
- •Copy (St, Poz, n)
- •Concat (St1[, St2, ..., StN] )
- •Length (St)
- •UpperCase (St)
- •LowerCase (St)
- •SetLength (St, n)
- •10.2.4. Встроенные процедуры, определенные над данными строковых типов переменной длины
- •Delete (St, Poz, n)
- •Insert (St1, St2, Poz)
- •10.2.5. Строковые ресурсы
10.1.4. Типизованные константы типа массив
Для инициализации массива в языке Delphi могут быть использованы типизованные константы типа массив.
Синтаксис константы-массив представляет рисунок 10.4.
Рисунок 10.4 – Синтаксическая диаграмма задания типа массив
Типизованные константы-массив объявляются в разделе констант.
Пример 10.11.
Объявление одномерной константы-массив.
Type
ТMas = Array [1..10] Of Integer;
Const
{Для присваивания типа типизованной константе-массив используется имя типа}
M: ТMas = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
{Для присваивания типа типизованной константе-массив используется задание типа}
Simv: Array [1..5] Of Char = (‘A’, ‘B’, ‘C’, ‘D’, ‘E’);
{или (эквивалентная форма записи):
Simv: Array [1..5] Of Char = (‘ABCDE’);}
В данном примере элементам М[1], M[2], ..., M[10] константы-массив М присваиваются значения 1, 2, ..., 10 соответственно. Аналогично элементам Simv[1], Simv[2], ..., Simv[10] константы-массив Simv присваиваются значения ‘A’, ‘B’, ‘C’, ‘D’, ‘E’.
При объявлении многомерной константы-массив учитывается, что задание типа
Array [1..M, 1..N, 1..K] Of <Тип>
с учетом полной формы задания массивов эквивалентно объявлению
Array [1..M, 1..N] Of Array [1..K] Of <Тип>
или
Array [1..M] Of Array [1.. N] Of Array [1..K] Of <Тип>
Многомерный массив фактически состоит из массивов меньшей мерности.
Отсюда следует, что при задании многомерной константы-массив в качестве <Типизованной_константы> (см. рисунок 10.4) следует использовать константу-массив на единицу меньшей мерности, чем текущая константа-массив. Массив каждой мерности заключается в круглые скобки.
Пример 10.12.
Объявление многомерных констант-массивов.
Type
ТMas3 = Array [1..2, 1..2, 1..2] Of Integer;
Const
M3: ТMas3 = (((0,1), (2,3)), ((4,5), (6,7)));
Массиву М3 будут присвоены следующие начальные значения:
M3[1,1,1] = 0 M3[1,2,1] = 2 M3[2,1,1] = 4 M3[2,2,1] = 6
M3[1,1,2] =1 M3[1,2,2] = 3 M3[2,1,2] = 5 M3[2,2,2] = 7
Значения присваиваются в порядке размещения элементов массива в памяти машины. Наиболее быстро изменяется последний индекс.
Вывод значений структурной константы-массив производится аналогично массивам – поэлементно в цикле. Вывод полной константы массив сразу не предусмотрен.
С помощью структурной константы-массив может производиться инициализация массива.
Пример 10.13.
Инициализация массива с помощью структурной константы-массив (применительно к предыдущим примерам).
------------------
Var
M1: ТMas;
MM: ТMas3;
-----------------
Begin
M1 := M;
MM := M3;
Следует напомнить, что типизованные константы в Delphi не могут изменять исходное значение в ходе выполнения программы.
10.1.5. Уплотнение структурных данных в памяти
С целью экономии памяти, занимаемой массивами или другими структурными типами, может использоваться служебное слово Packed, например:
Var
М: Packed Array [1..10] of Byte;
Служебное слово Packed указывает компилятору, что элементы структурного типа должны храниться плотно прижатыми друг к другу, даже если это замедляет доступ к ним.
Если структурный тип данных описан без ключевого слова Packed, компилятор выравнивает его элементы по 2- и 4-байтовым границам, чтобы ускорить доступ к ним.
Служебное слово Packed применимо к любому структурному типу данных (например, массиву, множеству, записи, файлу).