Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Понятие записи. Объявление записи в программе.



Тип записи используется для хранения под одним именем разнотипных (в отличие от массива) элементов. Эти элементы называются обычно полями записи.

Допустим необходимо представить в виде записи информацию о дне рождения: день, месяц и год. Соответствующая иерархическая структура будет иметь вид:

birthday

day month year

1..31 1..12 word

Описание такой записи на Паскале:

Тип полей записи
var

birthday: record

Поля записи
day: 1..31;

month: 1..12;

year: word;

end;

 
 
Имена полей записи

 


Замечание:

Тип записи, как и тип массива, можно описывать прямо в секции описания переменных. Но такую запись нельзя будет передать в подпрограмму.

Начинается описание записи со слова record, заканчивается словом end. Порядок описания полей соответствует порядку их размещения в памяти, т.е. в памяти эти поля будут расположены таким образом, что адреса будут расти при движении по записи сверху вниз. Записи часто бывают вложенными, когда одна запись вкладывается в другую и представляет собой достаточно сложную иерархическую структуру. Вложенные записи часто используются для представления таблиц.

Пусть таблица table имеет следующую структуру:

  A       B  
      C   D  
e f g h i j k
             

Соответствующее описание записи: var table: record A: record e: byte; f: word; g: real; end {A}; B: record C: record h: byte; i: char; end {C}; D: record j: real; k: byte; end{D}; end {B}; end {table};  
Такой структуре записи соответствует следующая иерархическая структура данных:

table

       
   
 


A B

e f g C D

h i j k

 

 

То, что написано выше позволяет сохранить только одну строку в сложной таблице. Если необходимо представлять таблицу размерам, больше чем одна строка, то возможно два варианта:

1). Можно рассматривать сложную таблицу как бы состоящую из большого количестваоднострочных карточек: В этом случае иерархической структуре будет соответствовать массив записей, где каждая запись позволяет описать одну строку таблицы:

var

table: array [1..10] of record

A: record

e: byte;

f: word;

g: real; структура базы данных

end {A};

B: record совокупность полей и их свойств

C: record

n: byte;

i: char;

end {C};

D: record

j: real;

k: byte;

end {D};

end {B};

end {table};

10 записей в базе данных


  A       B  
      C   D  
e f g h i j k
           

 

поля базы данных база данных

2). Массивом будет являться поле записи:

var table: record

A: record

e: array[1..20] of byte;

f: array[1..20] of word;

g: array[1..20] of eal;

end;

B: record

C: record

n: array[1..20] of byte;

i: array[1..20] of char;

end;

D: record

j: array[1..20] of real;

k: array[1..20] of byte;

end;

end;

end;

 

  A       B  
      C   D  
e f g h i j k
             
             
           
             

 

20 строк в каждой строке колонки (поля) логически связаны друг с другом

 

Первый способ представить таблицу отличается от второго, например, удобством сортировки записей в целом. Если необходимо сортировать строки в таблице то по 2-му способу надо будет переупорядочивать для каждой строки все элементы массивов, а сам по 1-му способу – то можно будет «сдвигать» записи (строки) в целом, что удобнее.

 

Доступ к полям записи.

Доступ к полям записи производится с использованием т.н. составных имен, в записи которых всегда присутствует точка. Применительно к записи составное имя образуется из имени переменной типа запись, справа от которого через точку записывается в простейшем случае имя интересующего нас поля.

Var

A: record

b: byte;

C: record

d: char;

e: byte;

end;

end;

В приведенной записи доступ к полям выглядит следующим образом:

A. b: =;

A. C. d: =;

Имя поля
A. C. e: =;

       
   
 
 
Путь к полю записи

 

 


В записи три поля. Доступ к полю b записи достаточно прост. Доступ к полям e и d наиболее сложен, потому что слева записывается путь, который нужно пройти, двигаясь от начала описания записи.

В случае массива записей доступ для поля h будет выглядеть:

table[5]. B. C. h: =;

Для случая, где массивы являются полями записи доступ к полю hвыглядит следующим образом:

table. B. C. h[5]: =;

 

19.3 Оператор with

Формат его записи:

with префикс do

оператор;

 

один оператор!

Если описание записи длинное (путь к полям записи долго писать) и необходимо выполнить единообразные действия над полями этой записи, то оператор with избавляет от необходимости каждый раз для каждого действия записывать полный путь интересующей записи.

Для последнего случая, если надо обработать все элементы массива (поля) и, то обработку можно описать следующим образом:

table.B.C.h[1]: =;

table.B.C.h[2]: =;

table.B.C.h[3]: =;

...

table.B.C.h[9]: =;

 
 


Путь к полю записи
with table.B.C do

begin

h[1]: = …;

h[2]: = …;

...

end;

В качестве префикса после with необходимо указывать ту часть пути, которую не надо (не хочется) многократно переписывать. В этом случае после do в описании действий над полями можно префикс над полями автоматически опускать.

Примечание . После do можно писать только один оператор. Если надо написать несколько, то следует использовать операторные скобки.

Действия над записями

Разрешается присваивать одной записи целиком содержимое другой (но обязательно однотипной) записи. Ввод-вывод возможен только по отношению к полям записи. Запись можно передавать как параметр в подпрограммы. Надо только предварительно описать тип такой записи в секции описания типов (для обеспечения эквивалентности типа формального и фактического параметра-записи).

19.5 Записи с вариантами

Основная идея состоит в том, что в рамках одной и той же области памяти, выделенной для одной записи, привести описания различных вариантов заполнения этой области. В общем случае вариантрая запись состоит из двух частей: фиксированной и вариантной (переменной).

 

 
 


имя1: тип1; поля фиксированной части

Var имя2: тип2;

R: Record ……………. имя: тип или тип

Фиксированная часть

Варьируемая часть case селектор of

End; конст1: (имя1: тип1); вариантные поля

конст2: (имя2: тип2);

………………………..

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-12; Просмотров: 795; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.047 с.)
Главная | Случайная страница | Обратная связь