Записи в Паскале – фиксированное число элементов одного или нескольких типов, то есть в отличие от массивов, в которых содержатся элементы одного типа, в записях могут содержаться элементы как одного, так и разных типов. Тема, например, сведения о книгах имеет структуру: автор, название книги, издательство, год издания, её цена. Первые три элемента относится к строковому типу данных, четвертый к целому, а цена - к вещественному типу. Элементами записей могут быть базовые типы, переменные, массивы, указатели, записи и т.д. Элементы записи вместе с их описанием называются полями записи. Над элементами записи можно выполнять действия, допустимые для данных этого типа.
Все записи должны быть описаны в разделе TYPE . Описание записи начинается со служебного слова RECORD заканчивается END, между которыми указывается список имен и типов полей, выбранных пользователем.
Все идентификаторы полей в записи должны быть различными.
Например, запись Воок можно описать следующим типом card:
TYPE card = record
Author : string [15];
Title: string [20];
Firm: string[10];
year : integer ;
cena : real
End;
VAR Book : card;
Тип записи (например, card) вводит только шаблон записи и с его именем не связан никакой конкретный обьект. Обращение к полю выполняется с помощью составного имени (селектора записи), которое состоит из :
Имя_записи . имя_элемента
Например, присвоить значения элементам записи Author и Title можно так: Book.author:=’Довгаль С.И.’; Book.title:=’Турбо Паскаль V 7.0’;
Ввод цены книги с клавиатуры : readln (Book.cena);
Для упрощения и сокращения записи составных имен используется оператор присоединения WITH. Имя записи выносится в заголовок оператора присоединения, а в блоке используются только имена полей записи. Общий вид оператора присоединения:
WITH имя записи DO оператор;
Предыдущие операторы можно записать проще:
With Book do begin
author:=’Довгаль С.И.’; title:=’Турбо Паскаль V 7.0’; readln (cena);
end;
Пример: Из ведомости 3-х студентов с их оценками ( порядковый номер, Ф.И.О. и три оценки) определить количество отличников и средний бал каждого студента.
Program Spic;
Type wed = record {Тип wed включает 3 поля: n, fio, bal}
n : integer ;
fio : string[40] ;
bal : array [1..3] of integer {Поле bal – массив из 3 оценок }
end;
Var spisok : wed ; {Запись spicok типа wed}
i, j, kol, s : integer; sr : real;
Begin
kol:=0; {kol- количество отличников}
With spisok do {with присоединяет имя записи spisok ко всем }
For i:=1 to 3 do { полям внутри цикла For по i }
begin
n:=i;
Write (' Vvedite FIO # ', i ,' ');
Readln (fio);
s:=0;
For j:= 1 to 3 do
begin
write ( 'Vvedite ocenky: ' );
readln ( bal [j] );
s := s+ bal [j];
end;
if s=15 then kol:=kol+1; {подсчет количества отличников}
sr := s/3; writeln ( fio, ', Sredniy bal = ', sr:4:1); end;
writeln ( ' Kolichestvo otlichnikov = ', kol );
readln;
end.
Результат работы программы: