Содержание

Слайд 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

    Чтобы упростить доступ к полям записи, используется оператор присоединения 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 =

Например:
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-х студентов с их оценками ( порядковый номер,

Пример: Из ведомости 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.