ЗАПИСИ
Компьютеры широко используются в различных, информационно-поисковых системах (адресное бюро, телефонная справочная служба, и т.п.). В реальных информационных системах приходится обрабатывать и хранить большие объемы данных.
Иногда для решения задач, в которых возникает необходимость хранить и обрабатывать совокупности данных различного типа, используются отдельные массивы для каждого типа данных, а для установления соответствия между ними вводятся соответствующие индексы.
Итак, реальные данные об объектах часто описываются величинами разных типов. Например, товар на складе описывается следующими величинами: наименование, количество, цена, наличие сертификата качества и т. д. В этом примере наименование — величина типа string, количество — integer, цена — real, наличие сертификата качества можно описать величиной типа boolean. Для записи комбинации объектов разных типов в Паскале применяется комбинированный тип данных — запись.
Запись представляет собой наиболее общий и гибкий структурированный тип данных, так как она может быть образована из неоднотипных компонентов и в ней явным образом выражена связь между элементами данных, характеризующими реальный объект.
ОПИСАНИЕ ТИПА ЗАПИСЬ
Запись — это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов. Определение типа записи начинается идентификатором record и заканчивается зарезервированным словом end. Между ними заключен список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля.
Формат:
type
<�имя типа> = record
<�идентификатор поля>:<�тип компонента>;
…
<�идентификатор поля>:<�тип компонента>
end;
var
<�идентификатор, ... > : <�имя типа>;
Пример:
Type
Car = record
Number : integer; {Номер}
Marka : string[20]; {Марка автомобиля}
FIO : string[40]; {Фамилия, инициалы владельца}
Address: string[60] {Адрес владельца}
end;
var
M, V : Car;
В данном примере запись Car содержит четыре компонента: номер, название марки машины, фамилию владельца и его адрес. Доступ к полям записи осуществляется через переменную типа "запись". В нашем случае это переменные М и V типа Саг.
Идентификатор поля должен быть уникален только в пределах записи, однако во избежание ошибок лучше делать его уникальным в пределах всей программы. Объем памяти, необходимый для записи, складывается из длин полей.
Значения полей записи могут быть использованы в выражениях. Имена отдельных полей не применяются по аналогии с идентификаторами переменных, поскольку может быть несколько записей одинакового типа. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи Саг, надо записать:
М.Number, M.Marka, M.FIO, M.Address
Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания.
Пример:
М.Number := 1678;
M.Marka:=’ГАЗ -24’;
M.FIO:='Демьяшкин В.А.';
М.Address:='ул.Пушкина 12 — 31';
Составные имена можно использовать, в частности, в операторах ввода-вывода:
Read(M.Number, M.Marka, M.FIO, M.Address);
Write(M.Number:4, M.Marka:?, M.FIO: 12, M.Address:25) ;
Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип. Например,
V := М;
После выполнения этого оператора значения полей записи V станут равны значениям соответствующих полей записи М.
В ряде задач удобно пользоваться массивами из записей. Их можно описать следующим образом:
type
Person = record
FIO : string[20];
Age : 1..99;
Prof : string[30]
end;
var
List: array[1..50] of Person;
Обращение к полям записи имеет несколько громоздкий вид, что особенно неудобно при использовании мнемонических идентификаторов длиной более пяти символов. Дня решения этой проблемы в языке Паскаль предназначен оператор with, который имеет следующий формат:
with <�переменная типа запись> do <�оператор>;
Один раз указав переменную типа запись в операторе with, можно работать с именами полей как с обычными переменными, т. е. без указания перед идентификатором поля имени переменной, определяющей запись.
Пример:
Присвоить значения полям записи Саг с помощью оператора with.
with M do begin
Number:= 2347;
Marka:=’ГАЗ – 24’;
FIO:= 'Петров В.И.';
Address:='ул.Остужева,5'
end;
задача №1: Опишите запись Car, содержащую поля с номером автомобиля, его маркой, именем владельца и адресом владельца. Сформируйте массив из 5 элементов типа Car. Выведите на дисплей информацию по одному из пяти автомобилей.
Uses Crt;
Type car=record
number : integer;
marka: string[20];
fio: string[40];
adres: string[60]
end;
Var garag: array[1..5] of car;
i,n: integer;
Begin
ClrScr;
for i:=1 to 5 do
begin
clrscr;
writeln('Введите данные о ',i,'-й машине:');
with garag[i] do
begin
write('номер: '); readln(number);
write('марка: '); readln(marka);
write('фио владельца: '); readln(fio);
write('адресс владельца: '); readln(adres);
end;
end;
clrscr;
writeln('Ввод окончен! ');
readln;
clrscr;
write('Данные по какой машине вывести (1..5): '); readln(n);
clrscr;
writeln(' Данные по ',n,'-й машине: ');
with garag[n] do
begin
writeln(' номер: ',number);
writeln(' марка: ',marka);
writeln(' фио владельца: ',fio);
writeln('адресс владельца: ',adres);
end;
readln
End.
|