
- •Раздел 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. Строковые ресурсы
Voz [f] Godrozd [f].
В зависимости от значения F выбираются конкретные элементы массива, например:
Voz [Ivanov] Voz [Petrov]
Пример 10.3.
Использование идентификаторов скалярного типа в качестве <Типа_индекса>.
Type
{Одномерный массив из двух элементов вещественного типа:}
TMas1 = Array [Boolean] Of Real;
{Одномерный массив из 256 элементов целого типа:}
TMas2 = Array [Char] Of Integer;
Var
M1: TMas1;
M2: TMas2;
J, А, В: Boolean;
Simv : Char;
Пример 10.4.
Примеры обращений к элементам массивов, объявленных в примерах 10.1 ÷ 10.3.
A [1] – 1-ый элемент массива А.
E [–1, 18] – обращение к элементу с номером строки –1 и номером столбца 18 матрицы Е.
C [2 * I – 5] – использование индексного выражения.
Voz [Andreev] – обращение к элементу с индексом Andreev массива Voz.
Voz [F] – обращение к элементу с индексом Andreev массива Voz. К этому моменту значение переменной F уже должно быть определено.
Voz [Pred(F)] – использование индексного выражения.
M1[False] – обращение к элементу с индексом False массива М1 (фактически это первый элемент массива М1).
M1[J] – обращение к элементу с номером J массива М1. J должно иметь тип Boolean.
M1 [A or B] – использование индексного выражения (A, B – логические переменные).
M2 [‘Z’] – обращение к элементу с индексом ‘Z’ массива М2.
M2 [Simv] – обращение к элементу с индексом Simv массива М2 (Simv – переменная типа Char).
При использовании индексных выражений необходимо следить, чтобы их значения не выходили за пределы <Типа_индекса> в объявлении массива.
Синтаксическая диаграмма задания типа Array (см. рисунок 10.2) является сокращенной формой задания многомерных массивов.
Полная форма задания многомерных массивов образуется на основании задания массивов меньшей размерности. Например, двумерный массив – матрица из N строк и M столбцов – может быть представлен как одномерный массив, состоящий из N элементов, а каждый элемент этого массива в свою очередь является одномерным массивом, состоящим из M элементов.
Таким образом, в соответствии с полной формой задания многомерных массивов двумерный массив А целых чисел, состоящий из 10 строк и 20 столбцов, может быть объявлен так, как это сделано в примере 10.5.
Пример 10.5.
Способы объявления многомерных массивов.
1-й способ.
Type
TDvummas = Array [1 .. 10] Of Array [1 .. 20] Of Integer;
Var
A: TDvummas;
2-й способ.
Type
TOdnmas = Array [1 .. 20] Of Integer;
TDvummas = Array [1 .. 10] Of Odnmas;
Var
A: TDvummas;
Из полной формы объявления массива очевидно, что к элементу A [I, J] двумерного массива А можно обращаться так:
A [I] [J]
Такая запись трактуется как J-ый элемент I-ого элемента массива А, т.е. элемент, находящийся на пересечении I-ой строки и J-ого столбца.
Отсюда следует, что Delphi допускает переменные, обозначающие подмассивы.
Запись A[I] для двумерного массива А будет означать I-ую строку массива А.
Для М-мерного массива обращение к его элементу в соответствии с полной формой объявления массивов выглядит так
A [I1] [I2]...[IМ]
В этом случае запись A[I1] означает (М – 1)-мерный подмассив массива А.
В многомерных массивах тип индекса не обязательно должен быть одним и тем же. Индексы по каждому измерению могут иметь разные типы.
Пример 10.6.
Использование индексов разного типа.
Type
TDen = 1 .. 31;
TMes = (Yan, Feb, Mar, Apr, May, Iyn, Iyl, Avg, Sen, Okt, Nob, Dec);
TGod = 1900 .. 2000;
TData = Array [TDen, TMes, TGod] Of (Pn, Vt, Sr, Ch, Pt, Sb, Vs);
Тип Data может быть задан и таким образом:
Type
TData = Array [1 .. 31, (Yan, Feb, Mar, Apr, May, Iyn, Iyl, Avg, Sen, Okt, Nob, Dec), 1900 .. 2000] Of (Pn, Vt, Sr, Ch, Pt, Sb, Vs);
Мерность (размерность) массива синтаксисом языка Delphi не ограничена.
Компилятор размещает массив в сплошной области памяти, отводя каждому элементу участок памяти в соответствии с базовым типом. Многомерные массивы располагаются «по строкам», т.е. быстрее изменяется последний индекс.
Например, дан двумерный массив А целых чисел (типа Smallint):
Расположение данного массива в памяти иллюстрирует рисунок 10.3.
Рисунок 10.3 – Расположение двумерного массива в памяти