Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по информатике.doc
Скачиваний:
23
Добавлен:
22.04.2019
Размер:
469.5 Кб
Скачать

Тема№29 Структурированные типы: массивы, строки, записи, файлы.

Массивы

Как и Turbo Pascal, FPC поддерживает массивы. Поддерживаются и многомерные, упакованные и динамические массивы в стиле Delphi.

Массив – упорядоченная индексированная совокупность однотипных компонент, имеющих общее имя. Массив определяется:

именем,

индексами (номерами компонент). Индексы должны иметь порядковые типы.

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

одномерный (или вектор),

двумерный (или матрица),

многомерный.

Различают массивы:

Статический. Память для него выделяется компилятором при объявлении переменной (в статической памяти).

Динамический. Память для него выделяется при исполнении программы (в динамической памяти). Перед обращением к элементам такого массива необходимо задать его фактическую размерность с помощью функции SetLength, чтобы в динамической памяти под массив была выделена область нужного размера.

Любой тип массива перед употреблением должен быть объявлен. Имя типа любое уникальное.

Статические массивы

Массив называется статическим, когда в определение массива включена размерность массива. Попытка доступа к элементу массива с индексом, лежащим вне объявленного диапазона, приведет к ошибке времени выполнения при условии, что включён контроль границ.

Объявление Значения

type

<Имя>=array[<Индексы>] of <Тип компонент>;

Набор из заданного количества компонент указанного типа. Каждый индекс задается диапазоном через горизонтальное двоеточие.

type

MyArray=array[1..7,1..10] of real; // Объявление типа массива

var

Ar1:MyArray; // Явное объявление массива

Ar2:array[1..20,1..15] of real; // Неявное объявление массива

Доступ к элементу массива: Ar1 [2, 2]

Динамические массивы

Объявление Значения

type

<Имя > = array of <Тип компонент>;

var

<Имя переменной> = array of <Имя типа>;

Фактическая размерность массива задается с помощью функции

SetLength(<Имя переменной>, <Размер индекса>);

Для многомерного массива структура array of повторяется столько раз, сколько индексов имеет массив.

Набор из заданного базовым типом количества компонент. Индекс нумеруется от 0.

Пример

type

MyArray=array of byte; // Объявление типа массива. Размера нет

var

Ar1:MyArray; // Явное объявление массива

begin

SetLength(Ar1,10); // Фактическая размерность массива 10

end.

Записи (комбинированные типы)

Запись – это набор компонент разного типа, размещаемых в полях записи. Имена полей локальны в записи. Различают записи:

Фиксированные.

Вариантные. Никак не связаны с типом Variant – вариант.

Любой тип записи перед употреблением должен быть объявлен. Имя типа любое уникальное

Объявление Значения

type

<Имя типа>=record

<Имя поля 1>:<Тип 1>;

{…….}

<Имя поля N>:<Тип N>;

[вариантная часть]

end;

Точки с запятой в конце строки нет.

Вариантная часть содержит список вариантов. Для каждого варианта указывается ключ выбора и список его полей.

Записи без вариантной части

Пример:

type

MyData=record // Мои данные

FirstName:string[15]; // Имя

LastName:string[20]; // Фамилия

BirthDay:byte; // День рождения

BirthMonth:byte; // Месяц рождения

BirthYear:word; // Год рождения

Phone:string[15]; // Телефон

Address:string[30]; // Адрес

end;

Записи с вариантной частью

Пример:

type

MyData=record // Персона

FirstName:string[15]; // Имя

LastName:string[20]; // Фамилия

BirthData:date; // Дата рождения

case Citezen:Boolean of // Гражданство (да или нет)

True:BirthPlace:String[40]; // Если да – место рождения,

False:(Country:String[20], // Если нет – страна гражданства,

EntryDate:Date, // Дата вьезда,

ExitDate:Date); // Дата выезда

end; // Конец вариантной части

end; // Конец записи

Множества

Множество – это набор компонент из заданного набора. В множестве компонент присутствует в единственном экземпляре. Например, множества [1, 2, 3] и [1, 2, 2, 3] эквивалентны. Любой тип множества перед употреблением должен быть объявлен. Имя типа любое уникальное.

Объявление Значения

type

<Имя>=set of <Имя целевого типа>;

var

<Имя переменной>:<Имя типа>; Набор компонент из заданного перечня

Целевой тип – порядковый тип с числом компонент не более 256. Возможны Byte, Char, интервальные и перечислимые типы. Значения множественного типа заключают в квадратные скобки.

Пример:

type

Set1=set of byte; // Целые числа 0..255

Set2=set of char; // Символы с № 0..255

Set3=set of 1..12; // Тип-поддиапазон

Svetofor=set of (‘Red’,’Green’,’Yellow’,’Dead’); // Перечисляемый тип

Файлы

Файл – это последовательность однотипных компонент на внешнем устройстве. В FPC определены файлы:

типизированный, это последовательность однотипных компонент,

текстовый, это последовательность строк символов,

нетипизированный, это последовательность байтов.

Любой файловый тип перед употреблением должен быть объявлен. Имя типа любое уникальное.

type

<Имя типа>=file of <Имя типа компонент>;

Компоненты файла любые, кроме:

файлов,

структурированных с файлами.

Пример

type

MyFile1=file of real; // Типизированный файл

MyFile2=file of text; // Текстовый файл

MyFile3=file; // Нетипизированный файл