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