Пример использования данных типа запись




Тип запись

Классификация: нестандартный, структурированный (сложный) тип.

Имя определяет программист.

Запись - структура данных, состоящая из фиксированного числа компонентов, названных полями. Каждое поле имеет свое уникальное имя. Компоненты записи могут быть разных типов.

Отличие записи от массива:

- компонентами являются данные разных типов;

- элементу массива соответствует(ют) индекс(ы), а элементу записи (полю) - имя поля.

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

Структурная организация

По структуре тип запись - последовательность поименованных полей (рис.22.1). Размер поля определяется типом полей.

Имя первого поля   Тип поля
Имя второго поля   Тип поля
...    
...    
Имя последнего поля   Тип поля

Рис. 22.1. – Структура записи

Определение типа

В общем случае данное типа запись состоит из двух частей – постоянной и вариантной. Пока определим только тип запись с постоянной частью (рис.22.2). Запись с вариантной частью определим позднее.

Например, определим тип запись для анкетных данных ученика

type anketa = record

fam:string[20];

gr: word;

pol:char

end;

 

Рис. 22.2. – Определение типа запись

Множество значений

Каждое поле может принимать в качестве значения любую величину из множества значений, которое определяет тип поля. Множество значений типа запись включает в себя все значения, которые могут быть размещены в структуре, заданной определением типа.

Множество операций

Не существует операций над записью целиком (за исключением унарной операции определения адреса переменной типа запись). Можно выполнять операции с компонентами записи - полями. Тип поля определяет набор операций, которые можно выполнять над полями. Элемент записи (поле) определяется синтаксической диаграммой, показанной на рис. 22.3.

Рис. 22.3. – Элемент записи

Например, имеется var ank:anketa; {тип anketa определен ранее}, необходимо занести в эту переменную анкетные данные Иванова 1965 года рождения:

ank.fam:='Иванов';

ank.gr:= 1965;

ank.pol:='м'

Можно идентифицировать поле записи короче, если использовать присоединяющий оператор, синтаксис которого показан на рис. 22.4.

Рис. 22.4. – Присоединяющий оператор

В операторе, стоящем после символа DO, поле записи можно задавать только именем поля. В этом операторе все имена проверяются на принадлежность записи, имя которой указано после символа WITH. Если имя совпадает с именем поля, то действия производятся над полем записи. Поэтому необходимо быть осторожным при совпадении имен переменных с именами полей записей. Приведенный выше пример может быть записан следующим образом:

with ank do begin

fam:='Иванов';

gr:= 1965;

pol:='м'

end

Имя записи не должно содержать никаких переменных, подлежащих изменению в операторе, стоящем после WITH. Например, если имеется var inform:array[1..100]of anketa, то нельзя записать следующие действия:

with inform[i] do begin

fam:='Иванов';

gr:= 1965;

pol:='м';

i:=i+1

end

так как изменение i внутри тела оператора присоединения изменяет имя записи, которая присоединяется к полям. В этом случае правильной будет следующая последовательность операторов:

with inform[i] do begin

fam:='Иванов';

gr:= 1965;

pol:='м'

end;

i:=i+1

Пример использования данных типа запись

О самолете имеется следующая информация:

- бортовой номер (целое число)

- тип самолета (название, состоящие из символов. Например,

- ТУ154, ИЛ86, ЯК42)

- дата очередного профилактического ремонта (день в пределах 1..31, месяц в пределах 1..12, год - целое число);

- бригада, проводившая последний профилактический ремонт (фамилия бригадира, последовательность символов)

Информационная структура представляет собой фиксированный набор разнотипных компонентов, поэтому структура - типа запись. Определить тип ТINF, как тип запись, состоящую из 4-х полей:

ТINF = record

bort:longint;

tip_sam:string[5];

d_prof:data;

brigada:string[10]

end;

запись типа data имеет структуру:

data=record

den:1..31;

mes:1..12;

god:word

end;

Как только объявим переменную SAM типа INF var SAM:INF;

так сразу же в памяти получим структуру, изображенную на рис. 22.5.

SAM ОП  
SAM.bort Longint Longint
SAM.tip_sam String[5] String[5]
SAM.d_prof.den 1..31 1..31
SAM.d_prof.mes 1.. 12 1.. 12
SAM.d_prof.god Word Word
SAM.brigada String[10] String[10]

Рис. 22.5. – Переменная SAM в ОП

Постановка задачи

К аэропорту приписано 200 самолетов. Определить все самолеты, которым на завтра предписан профилактический ремонт.

Задача относится к информационно-поисковым системам. Алгоритмы их достаточно просты. Основным является выбор структуры данных - разработка информационной модели адекватной исследуемым объектам. Для нашего случая, в качестве информационной модели можно выбрать массив из 200 элементов типа запись. Структура этой записи приведена на рис. 22.5.

Информационная модель

Обрабатываемый информационный объект можно определить следующим образом:

const n=200;{граница массива}

type data=record {дата}

den:1..31;

mes:1..12;

god:word

end;

INF = record {информация об одном самолете}

bort:longint;

tip_sam:string[5];

d_prof:data;

brigada:string[10]

end;

infarray=array[1..n]of INF; {структура информационного

массива}

var samolets:infarray;

Распределение оперативной памяти соответствующее обрабатываемому информационному объекту показан на рис. 22.6.


 

Samolets ОП  
samolets[1].bort   longint
samolets[1].tip_sam   string[5]
samolets[1].d_prof.den   1.. 31
samolets[1].d_prof.mes   1.. 12
samolets[1].d_prof.god   Word
samolets[1].brigada   string[10]
samolets[2].bort   longint
samolets[2].tip_sam   string[5]
Samolets[2].d_prof.den   1.. 31
samolets[2].d_prof.mes   1.. 12
samolets[2].d_prof.god   Word
samolets[2].brigada   String[10]
. .    
samolets[200].bort   longint
samolets[200].tip_sam   string[5]
samolets[200].d_prof.den   1.. 31
samolets[200].d_prof.mes   1.. 12
samolets[200].d_prof.god   Word
samolets[200].brigada   string[10]

Рис. 22.6. – Информационный объект

Программная модель

program remont;

const n=200;

type data=record {дата}

den:1..31;

mes:1..12;

god:word

end;

INF = record {информация об одном самолете}

bort:longint;

tip_sam:string[5];

d_prof:data;

brigada:string[10]

end;

infarray=array[1..n]of INF; {структура информационного

массива}

var samolets:infarray;{}

plan_data:data; {дата}

i:integer;

begin

{первоначальное заполнение информации в картотеке}

for i:=1 to n do

with samolets[i] do begin

writeln('Вв.инф. по ',i,' карточке');

readln(bort);

readln(tip_sam);

with d_prof do readln(den, mes, god);

readln(brigada)

end;

 

writeln('введите плановую дату');

with plan_data do readln(den,mes,god);

 

{поиск плановых бортов}

writeln('Запланированы на ',
plan.data.den:2,'.',plan.mes:2,'.',plan.god:4,':');

for i:=1 to n do

with samolets [i].d_prof do

if (den=plan_data.den)and

(mes=plan_data.mes)and

(god=plan_data.god) then

writeln('БОРТ=',samolets[i].bort:10,

' ТИП=',samolets[i].tip_sam)

end.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: