- •9. Перечисляемый тип данных. Строковый тип. Множества. Записи. Файлы
- •9.1. Перечисляемый тип данных
- •Var days: week;
- •9.2. Строковые данные. Типы Char и String
- •Var s1 : String[40];
- •Var Str1, Str2: String[20]; Ch1, Ch2 :Char;
- •Var s: String[20]; I:integer;
- •Insert('any', Str_3,5);
- •9.3. Множества
- •9.3.1. Описание и инициализация множеств
- •Var I: byte; begin
- •Var Str_1, Str_2, Str_3:string[10];
- •9.3.2. Предметные операции с множествами
- •9.3.3. Операции сравнения над множествами
- •9.3.4. Цикл типа For..In. Вывод множеств и их элементов.
- •Var d: week;
- •9.4. Записи
- •Var p_Data: Pers_Data;
- •Var p_Data: record fam:string[20]; adr:string[40]; tel:string[15];
- •Var woker_alpha: woker_firm;
- •Var woker_alpha: array [1..30] of Pers_Data;
- •9.5. Файлы
- •9.5.1. Описание файловых переменных
- •9.5.2. Стандартные операции с файлами. Связывание логических и физических файлов
- •9.5.3. Ввод и вывод данных из физических файлов. Вспомогательные действия
- •9.5.4. Примеры решения задач по обработке текстовых файлов
- •Var I:byte;n:integer; ft:text; FileName,st:string;
- •Var I,Lmas:integer; ft:text; FileName:string;
- •Var n,I:integer; ft:text; FileName:string;
- •Var str,w_s:string;
9.4. Записи
Записями называют связанные структуры, состоящие из нескольких элементов, называемых полями, которые могут иметь одинаковые или различающиеся типы и, соответственно размеры в памяти. Поля могут иметь любой тип, допустимый в Паскале (базовый или объявленный пользователем), кроме файлового. Полям задают собственные имена.
Структура записи похожа на одномерный массив, в котором элементы-поля могут иметь разные типы. Поэтому доступ к ним осуществляется не через индекс (номер элемента в массиве), а с использованием имени поля. Например, унифицированные краткие сведения о книгах имеют следующую структуру: автор, название книги, издательство, год издания, её цена. Первые три элемента относится к строковому типу данных, четвертый к целому, а цена - к вещественному типу. Над элементами записи можно выполнять действия, допустимые для данных этого типа.
Как и для других типов в Паскале, описание записи может быть дано в двух формах:
1) при помощи специального типа record или
2) непосредственным описанием соответствующей переменной.
Синтаксис описания типа record имеет вид:
type
имя типа = record описание всех полей записи end;
где record, end - служебные слова,
имя типа - любой разрешенный идентификатор Паскаля,
описание всех полей записи – список описаний полей, разделяемых “;” (после последнего описания перед end разделитель можно не ставить).
Синтаксис непосредственного описания переменной с именем имя переменной (любой разрешенный идентификатор Паскаля), имеющей тип record:
var
имя переменной: record описание всех полей записи end;
Для записей, как и для массивов, допускаются вложенные описания, в которых описание отдельного поля тоже может быть записью.
Пример 1. Разработать описание типа Pers_Data для записи, содержащей следующую информацию о сотрудниках фирмы: 1) фамилия, 2) домашний адрес, 3) телефон, 4) электронную почту, 5) должностной оклад. Ввести переменную данного типа с названием P_Data.
Решение. Дадим полям 1)-5) соответственно названия fam;adr;tel;e_mail;salary. Первые 4 поля являются строковыми величинами. Исходя из содержания вводимой в них информации, им присвоим длины 20,40,15,20. Последнему полю 5) присвоим вещественный тип:
type Pers_Data=record
fam:string[20]; adr:string[40]; tel:string[15];
e_mail:string[20]; salary:real
end;
Var p_Data: Pers_Data;
Пример 2. Дать непосредственное описание переменной с именем P_Data, в которой содержится тот же тип информации, что и в примере 1.
Решение:
Var p_Data: record fam:string[20]; adr:string[40]; tel:string[15];
e_mail:string[20]; salary:real
end;
Как целый объект запись может использоваться только в операторах присваивания, у которых в левой и правой частях стоят имена записей одинакового типа. Все остальные действия рассчитаны на работу с отдельными полями записей. Для обращения к ним при присвоении значений или их обработке применяют составные имена, которые состоят из имени записи, разделяющей точки и имени поля.
Пример 3. Примеры присваивания значений именам полей fam, tel и salary у переменной-записи с именем P_Data из примера 2 имеют вид:
P_Data. fam:='Андреев Б.В.';
P_Data. tel:='85662223322';
P_Data. salary:=36500.00;
Составные имена позволяют обращаться к полям записей из любой части кода программного блока, где они описаны.
Для перехода к обычным именам (без имени записи и разделяющей точки ) можно применить оператор присоединения with. Его синтаксис имеет вид:
with имя записи do оператор;
где оператор – оператор (простой или составной), задает область действия оператора присоединения, в пределах которой можно не использовать составные имена.
Пример 4. Применение оператора присоединения для выполнения действий из примера 3:
with P_Data do begin
fam:= 'Андреев Б.В.';
tel:='85662223322';
salary:=36500.00
end;
Для начальной засылки значений в поля записей (инициализации) в коде программы наряду с обычными присваиваниями можно использовать типизированные константы.
Пример 5. Инициализация значений полей записи, которая имеет тип Pers_Data, данный в примере 1, с использованием типизированной константы Andreev того же типа:
Const
Andreev: Pers_Data=(fam:'Андреев Б.В.';
adr:'105141,Moscow,Krasnaya Presnya street,37-125';
tel:='85662223322';
e_mail:'And_B_V@mail.ru'
salary:=36500.00);
При создании и хранении наборов однотипных записей необходимо использовать массивы из переменных типа record. Для этого можно использовать описание новых типов, представляющих собой массивы из записей, либо непосредственно описывать переменные-массивы из элементов-записей.
Пример 6. Для хранения данных по сотрудникам фирмы “Альфа”, необходимо описать массив записей woker_ALPHA типа Pers_Data, данного в примере 1. Возможно использование двух вариантов:
1) вариант с промежуточным описанием нового типа (массива записей) woker_firm:
type woker_firm: array [1..30] of Pers_Data;
