Иллюстрированный самоучитель по Kylix

       

Двумерный массив А на двадцать элементов Задание статического двумерного массива



Рисунок 2.2. Двумерный массив А на двадцать элементов

Задание статического двумерного массива:


var MyMatrix: array[1..10, 1..50] of Real;

Многомерные массивы называют еще и массивами массивов. То есть можно записать задание того же двумерного массива как:

var MyMatrix: array[1..10] of array[1..50] of Real;

Обращение к элементу массива происходит по всем его индексам. Например, для нашего двумерного массива доступ к элементу может выглядеть так: MyMatrix[5,30], либо MyMatrix[5] [30].

Для задания многомерного динамического массива можно использовать конструкцию языка:



array of array of baseType;

Например, создать двумерный динамический массив можно следующим образом:

var MyArray: array of array of integer;

Для того чтобы установить длину многомерного динамического массива с помощью процедуры setLength, нужно выполнить ее для всех индексов массива. Например,

SetLength(MyArray, 10,20);

Записи

Записи являются аналогом структур в других языках программирования. Они объединяют фиксированное число разнородных элементов (элементов разных типов). Каждый элемент записи имеет свое уникальное в пределах записи имя и называется полем.

Записи делятся на:

  • фиксированные;
  • вариантные.

Фиксированная запись — это запись, которая состоит из фиксированного числа полей. Для объявления фиксированной записи применяется следующая конструкция языка Object Pascal:

Record
FieldList1: Type1;
...
FieldListN: TypeN;
End;

где FieldList1 — имя первого поля, a FieldListN — имя последнего, N-го поля записи.

Вариантная запись — это запись, которая состоит из фиксированного числа полей, но позволяющая по-разному рассматривать области памяти, занимаемые полями. Вариантная часть в объявлении записи начинается со слова case и должна располагаться после объявления других полей записи. Для объявления вариантной записи можно использовать следующую конструкцию:

Record
FieldList1: Type1;
...
FieldListN: TypeN;
case tag: ordinalType of

constantList1: (variant1);
...
constantListn: (variantn);

end;

Первая часть объявления записи, до слова case, такая же, как и в фиксированной записи. После слова case начинается вариантная часть. В этой части:

  • признак (tag) является необязательной частью и представляет собой любую объявленную переменную типа ordinalType. Если вы не используете переменной, то можно ставить двоеточие сразу после слова case;
  • ordinalType — это порядковый тип;
  • каждый из вариантов значения переменной tag, представленный в списке constantList, должен быть единственным, без повторов;
  • каждое описание варианта (variant1 .. variantn) должно содержать обычное описание поля, например Fieidvar1: type1;.

Приведем пример использования вариантной записи. Предположим, что запись должна содержать данные о человеке. Назовем запись Person. Пусть она содержит имя (поле FirstName), фамилию (поле LastName), дату рождения (поле BirthDate) человека. Кроме того, если человек является гражданином России, в записи указывается место его рождения (поле BirthPlace). Если же человек — иностранец, то в записи о нем должны присутствовать следующие поля: страна (поле Country), дата въезда в Россию (поле EntryDate) и дата отъезда из России (поле ExitDate). Такую запись мы объявляем в листинге 2.1.



Содержание раздела