Слайд 2 Запись - это структура данных, состоящая из фиксированного числа
компонентов, называемых полями записи.
В отличие от массива, компоненты (поля)
записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.
Структура объявления типа записи такова:
<имя записи> = RECORD <сп.полей> END
где
< имя записи > - правильный идентификатор;
RECORD, END - зарезервированные слова (запись, конец);
<сп.полей> - список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой.
Слайд 3 Каждый раздел записи состоит из одного или нескольких идентификаторов полей,
отделяемых друг от друга запятыми. За идентификатором (идентификаторами) ставится двоеточие
и описание типа поля (полей), например:
type
BirthDay = record
day, month: byte;
year: word
end;
var
a,b: Birthday;
. . . . .
В этом примере тип BIRTHDAY (день рождения) есть запись с полями DAY, MONTH и YEAR (день, месяц и год); переменные A и В содержат записи типа BIRTHDAY.
Как и в массиве, значения переменных типа записи можно присваивать другим переменным того же типа, например
a := b;
Слайд 4 К каждому из компонентов записи можно получить доступ, если
использовать составное имя, т.е. указать имя переменной, затем точку и
имя поля:
a.day := 27;
b.year := 2012;
Для вложенных полей приходится продолжать уточнения:
type
BirthDay = record
day,month: byte;
year: word
end;
var
с = record
name: string;
bd: BirthDay
end;
begin
. . . . .
if c.bd.year = 2012 then . . .
end.
Слайд 5 Чтобы упростить доступ к полям записи, используется оператор присоединения
WITH:
WITH DO
где
WITH, DO - ключевые слова;
<переменная> - имя переменной типа запись, за которым, возможно, следует список вложенных полей;
<оператор> - любой оператор Турбо Паскаля,
Например:
with c.bd do month := 9;
Это эквивалентно
with с do with bd do month := 9
или
with c,bd do month := 9;
или
с.bd.month := 9;
Слайд 6Турбо Паскаль разрешает использовать записи с так называемыми вариантными полями,
например:
type
Forma = record
Name: string;
case
byte of
0: (Birthplace: string [40]);
1: (Country: string [20];
EntryPort: string [20];
EntryDate: 1..31;
ExitDate: 1..31)
end;
В этом примере тип FORMA определяет запись с одним фиксированным полем NAME и вариантной частью, которая задается предложением CASE... OF. Вариантная часть состоит из нескольких вариантов (в примере - из двух вариантов: 0 и 1). Каждый вариант определяется константой выбора, за которой следует двоеточие и список полей, заключенный в круглые скобки. В любой записи может быть только одна вариантная часть, и, если она есть, она должна располагаться за всеми фиксированными полями.
Слайд 7Замечательной особенностью вариантной части является то обстоятельство, что все заданные
в ней варианты накладываются друг на друга, т.е. каждому из
них выделяется одна и та же область памяти. Это открывает дополнительные возможности преобразования типов, например:
var
mem4: record
case byte of
0: (by: array [0..3] of byte);
1: (wo: array [0..1] of word);
2: (lo: longint);
end;
В этом примере запись MEM4 имеет три варианта, каждый из которых занимает в памяти один и тот же участок из 4 байт. В зависимости от того, к какому полю записи мы обращаемся в программе, этот участок может рассматриваться как массив из 4 байт (поле BY), массив из двух целых типа WORD (поле WO) или, наконец, как одно целое число типа LONGINT (поле LO).
Слайд 8КОНСТАНТЫ-ЗАПИСИ
Определение константы-записи имеет следующий вид:
: = ()
где
-- идентификатор константы;
-- тип записи;
-- список
значений полей.
Список значений полей представляет собой список из последовательностей вида: имя поля, двоеточие и константа. Элементы списка отделяются друг о друга двоеточием.
Слайд 9Например:
type
point = record
х, у: real
end;
vect = array [0..1] of point;
month = (Jan, Feb,
Mar, Apr, May, Jun, Jly, Aug, Sep, Oct, Nov, Dec);
date = record
d: 1..31;
m: month;
у: 1900..2099
end;
const
origon: point = (x: 0; у: -1);
line: vector = ((x: -3.1; у: 1.5), (х: 1.9; у: 3.0));
SomeDay: date = (d: 16; m: Mar; у: 2012);
Поля должны указываться в той последовательности, в какой они перечислены в объявлении типа. Если в записи используется хотя бы одно поле файлового типа, такую запись нельзя объявить типизированной константой.
Слайд 10Для записей с вариантными полями указывается только один из возможных
вариантов констант. Например:
type
forma = record
case Boolean
of
true: (Birthplace: string [40]);
false: (Country: string [20];
EntryPort: string [20];
EntryDate: array [1..3] of word;
count: word)
end;
const
Percon1: forma = (Country: 'Норвегия';
EntryPort: 'Мурманск';
EntryDate: (16, 3, 89);
count: 12);
Percon2: forma = (Birthplace: 'Москва');
Слайд 11Пример: Из ведомости 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.