Запись – это последовательность байтов на носителе, ограниченная с двух сторон специальными признаками. Такое определение дает представление о записи как о единице обмена между внешней и оперативной памятью компьютера. Однако сама запись бывает сложной структурой, содержащей разные данные. Запись может, например, соответствовать строке ведомости заработной платы, в которой указаны фамилия и несколько чисел, или строке классного журнала, где также содержатся фамилия и оценки. Таким образом, запись понимается как сложная конструкция. Поэтому в Паскале и других программных системах слово «запись» имеет двойной смысл: это и сложная структура, и единица данных на носителе (например, диске).
Запись — совокупность разнородных данных, описываемых и обрабатываемых как единое целое.
Данные, из которых состоит запись, называются ееполями. Поля могут быть простыми данными или составными, например массивами или записями. С помощью записей удобно описывать свойства объектов, хранить их совместно. Из записей состоят базы данных, включающие описание нескольких объектов. Описание записи состоит из ключевого словаrecord, после которого указываются имена полей и тип каждого поля. Тип поля отделяется от имени двоеточием. Описание записи заканчивается словомend и точкой с запятой. Записи описываются в разделе типов данныхtype, В этом разделе указывается имя класса объектов (имя типа) и описание этого класса. Для каждого объекта класса имеется свое имя в разделе переменныхvar с описанием данного типа. Это имя используется в дальнейшем в программе.
Пример. Объект — физическое тело с измерениями а, b, с (длина, ширина и высота). Описание может иметь вид а), когда для каждого поля указан тип данного, или б), когда подряд идущие однотипные поля описаны совместно:
a) type z = recordб) type z = record
a: integer;a, b, c:integer
b: integer; end;
c: integer var x: z;
end;
var x: z;
Пример.Объект — товар, характеризуется названием и ценой:
typetovar = record
sign: string[ 20];
price:real
end;
Пример. Объект — дата рождения: день, месяц, год. День можно указать как диапазон значении, такой тип данных называется интервальным. Этот тип используется для целочисленных и символьных данных в описаниях, а также как метка оператора варианта. Интервальным типом задаются значения констант в разделе const.
typedate_of_birth= record
day: 1 ..31;
month: string[10];
year:integer
end;
vardate: date_of_birth;
Записи могут объединяться в массивы. Массив записей описывается в разделеtype илиvar. Раздел переменных при объекте товар может иметь вид:
var x: array [ 1.. 100 ] of tovar; y: tovar;
x — массив записей, к каждому элементу которого используется обычное обращение, например х[ i ]; у — простая переменная.
Для обращения к полю записи применяется сложное имя, состоящее из двух имен, разделенных точкой. Первое из них — имя переменной типа «запись» из разделаvar, второе — имя поля этой записи из разделаtype. Так, для товаров имена полей в программе имеют вид:
у. sign, у. price, x [ 1 ]. sign, x [ i ]. price
Содержание сведений
Ф. И. 0.
Должность
Дата рождения
Зарплата
Имя поля записи
name
position
date
salary
Тип данных поля
String [20]
string [10]
date_of_birth
real
Пример. Пусть требуется описать сведения о работнике предприятия: фамилию, должность, дату рождения и зарплату. Для каждого поля записи необходимо сначала придумать имя, затем определить, какой тип наиболее удобен для обработки этих данных. Описываемые сведения включают в себя структуру типа
структуру типа «запись» (в виде поля даты рождения), которую также требуется уточнить и описать в разделе типов раньше, чем запись о работнике.
В описании данной записи используется тип «день рождения» (date_oi_birth) из примера 3. Общее описание записи имеет вид:
typedate_of_birth =record
day: 1 ..31;
month:string[10];
year:integer
end;
worker = record
name :string[ 20 ];
position:string[ 10 ];
date : date_of_birth;
salary :real
end;
varx:array[ 1. .7]ofworker; w: worker;
Поле записиdate содержит запись из трех полей. При формировании имени поля этой внутренней записи необходимо использовать тройное имя: имя переменной разделаvar, имя поля записиworker и имя поля записиdate_of_birth. Например, для переменной wобращение к месяцу рождения работника в программе будет иметь вид: w.date.month
В программе ввод и вывод записи производится по полям, но можно присвоить одной записи значение другой, при этом происходит копирование области памяти: х [ 1 ]: = w;
Оператор присоединения. Для обработки записи используется операторwith, который позволяет указать один раз имя записи из раздела переменных, а затем во всей области действия оператора указывать только имена полей этой записи из разделаtype. После словаwith можно написать несколько имен полей из раздела переменных.
Оператор присоединения имеет вид:
withсписок имен записейdoоператор;
Оператор бывает простым или составным, ограниченным операторными скобками. Список имен записей может состоять из одного имени.
Пример.Дан массив записей, содержащий сведения о работниках предприятия (пример предыдущий). Напечатать:
1) список бухгалтеров;
2) список работников от 30 до 50 лет;
3) среднюю заработную плату по предприятию.
Для записей этой задачи определяются их структура, имена и типы полей. Затем определяется имя массива записей, который используется в программе, и вспомогательные переменные, а также имена результатов. Программа
program Р37;
const n =10;
type date_of_birth =record
day: 1 .. 31;
month:string[ 10 ];
year:integer
end;
worker =record
name :string [ 20 ];
position:string [ 10 ];
date : date_of_birth;
salary :real
end;
var x:array [ 1..n]of worker; w: worker; i, j,g integer; S:real;
p:string [ 10 ];
Begin
{формирование массива записей}
for i: =1tondo
with x [ i ] do
Begin
writeln (‘сведения о’, i, ‘работнике’);
writeln (‘фамилия, инициалы’);
readln(name);
writeln (‘должность’);
readln(position);
writeln (‘число, месяц и год рождения’);
readln(date.day, date.month, date.year);
writeln (‘зарплата’);
readln(salary);
end;
{решение задачи 1) — печатание списка бухгалтеров}
p: = ‘бухгалтер’;
j: = 0; {счетчик строк списка — количество бухгалтеров}