28437

Записи. Структура объявления типа записи. Оператор присоединения WITH. Использование записи с вариантными полями. Примеры

Лекция

Информатика, кибернетика и программирование

Записи. Структура объявления типа записи. Использование записи с вариантными полями. Примеры Запись – это структура данных состоящая из фиксированного числа компонентов называемых полями записи.

Русский

2013-08-20

48.5 KB

6 чел.

Тема 6. Записи. Структура объявления типа записи. Оператор присоединения  WITH. Использование записи с вариантными полями. Примеры

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

При определении типа RECORD для каждого поля указывается идентификатор и тип поля.

Общий вид описания типа RECORD:

TYPE <имя типа>= RECORD

< список полей >

END.

Здесь < имя типа > - правильный идентификатор, < список полей> -список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой.

TYPE NTYPE =RECORD

ID 11, ID 12, …, ID 1N: TYPE1;

ID K1, ID K2, …, ID KN: TYPEK;

END;

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

Type DAT=RECORD

DEN: 1.. 31;

MEC: 1.. 12;

GOD: INTEGER;

END;

VAR DR, DPL: DAT;

Как и в массиве, значения переменных типа записи можно присваивать другим переменным того же типа, например:

DP:=DR;

Для обращения к полям записи, используется составное имя, т. е. указывается имя переменной типа RECORD, затем через точку указывается имя поля:

DR.DEN: = 3;

DR.MEC: =11;

DR.GOD:=2000;

Для вложенных полей приходится продолжать уточнения:

TYPE DAT=RECORD

DEN, MEC: BYTE;

GOD: WORD;

END;

VAR SV: RECORD

NAME: STRING;

DATR: DAT;

END;

BEGIN

IF SV.DATR.GOD>1980 THEN…

END.

В языке Паскаль можно использовать тип RECORD при описании других структурированных типов. Например, описание массива записей имеет вид:

TYPE GRUP=(ST1, ST2, ST3, ST4);

VAR MASDAT: ARRAY [GRUP] OF DAT;

где DAT-описанная выше запись;

MASDAT – массив, состоящий из записей дат рождения студентов.

Для занесения даты рождения например 1-го студента используются следующие операторы:

MASDAT. [ST1]. DEN: =7;

MASDAT [ST1]. MEC: =11;

MASDAT [ST1]. GOD: =1983;

Оператор WITH.

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

Для сокращения записи составных имен (для облегчения доступа к полям записи) используется оператор присоединения WITH. Его общий вид:

WITH <переменная> DO

<оператор>;

<переменная>- имя переменной типа RECORD, за которым, возможно, следует список вложенных полей;

<оператор> - любой оператор Паскаля.

Пример: для занесения даты рождения в приведенном выше примере достаточно выполнить операторы:

WITH MASDAT [ST1] DO

BEGIN

DEN: =7;

MEC: =11;

GOD: =1983;

END;

WITH SV. DATR DO MEC: =11; эквивалентно WITH SV DO WITH DATR DO MEC: =11;

 В операторе WITH можно использовать запятую, если необходимо указать более одного типа записи. Запятая служит сокращением для вложенных операторов WITH. Оператор WITH а, b DO... эквивалентен WITH а DO WITH b DO…

Таким образом, во внутреннем операторе можно использовать компоненты обеих записей. Например:

TYPE KRUG: =RECORD

RADIUS: REAL;

CENTER: RECORD

X, Y: REAL

END;

END;

VAR K: KRUG;

 Переменной K присвоить значение, соответствующее кругу радиуса 2.5 с центром в т. (0, 1.8)

  1.  WITH K DO BEGIN RADIUS: 2.5; CENTER.X: = 0; CENTER.Y: =1.8;END;

WITH K DO BEGIN RADIUS: 2.5; WITH CENTER DO BEGIN X: =0; Y: =1.8; END;

WITH K, CENTER DO BEGIN RADIUS: -2.5; X: =0;Y: =1.8;END;

Записи, рассмотренные выше, - это записи с фиксированными частями. В языке Паскаль имеется средство, позволяющее описывать записи переменной структуры. В этом случае список может содержать вариантную часть.

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

Общий вид описания записи с вариантами

Type NTYPE =RECORD

ID11, ID12, …, ID1N: TYPE 1;

IDK1, IDK2, …, IDKN: TYPEK;

CASE L: TYPE L OF

C1: (T11: TYPE 11;T12: TYPE12, …);

C2:(T21: TYPE 21; T22: TYPE 22, …);

CK: (TK1: TYPE K1; TK2; TYPE K2;…)

END;

VAR Z: NTYPE;

где NTYPE – имя типа; L –переменная называемая полем признака, TYPEL – тип признака; С1, С2, ..., Ск – константы выбора, должны принадлежать типу переменной L: T1, Т2, ... – список полей, соответствующих каждой константы выбора (поля является компонентами варианта)

Замечания

  1.  Любая запись может иметь только одну вариантную часть.

Вариантная часть должна расположатся после фиксированной части.

Замечательной особенностью вариантной части является то обстоятельство, что все заданные в ней варианты «накладываются» друг на друга, т.е. каждому из них выделяется одна и та же область памяти. Это открывает дополнительные возможности преобразования типов, например:

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 байт. Например, этой записи можно сначала присвоить значение как длинному целому, а затем проанализировать результат по байтам или словам:

VAR

begin

with m do

begin

lo: =trunc(2*pi*x);

if wo [l]=0 then

if by [1]=0 then

xb: =x [0]

else

x: =wo [0]

xl: =lo;

end;

...

end.

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

TYPE Видлист = (книга, журнал)

литист = record

АВТОР:STRING [20];

НАЗВ:STRING [30];

CASE ИСТ: видлист OF

Книга: (город: STRING [12]; Издат: STRING [20]; год-изд:INTEGER);

Журнал: (Назвжур: STRING [15]; Номер: BYTE;) год:INTEGER;

END;

VAR сплит: ARRAY [1..20] of литлист.

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

var Сплит [5] DO

begin

АВТОР:=’Фаронов В.В.’;

НАЗВ:=’TURBOPASCAL 7.0’;

ист:=’книга’;

город:= ’Москва’;

издат:= ’Нолидж’;

год изд.: = ‘1999’;

end;

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

Type

Rec1= record

a: byte;

b: word;

end;

rec 2=record

c: longint;

case x: byte of

1: (d: word);

2: (e: record

case of boolean of

3: (f: rec1);

3’: (g: single);

3’’: (c: word);

end)

end;

var r: rec2;

begin

r.x=255;

if r. E. G=0 then writeln (‘O. K.’)

else writeln (r..g); end.

 1осн. [104-108]

5доп [19-22], 10доп.[95-99], 11доп.[321-338]

Контрольные вопросы

  1.  Для чего предназначен и как выполняется оператор присоединения?
  2.  Что такое запись?
  3.  В каких случаях целесообразно  использовать вариантные записи?
  4.  Какие преимущества дает использование оператора присоединения?
  5.  Какова структура объявления типа запись?
  6.  Каким образом осуществляется доступ  компонентам записи?


 

А также другие работы, которые могут Вас заинтересовать

29028. Определение глубины заложения фундамента исходя из инженерно-геологических и гидрогеологических условий строительной площадки 31.5 KB
  Этот выбор производится на основе предварительной оценки прочности и сжимаемости грунтов по геологическим разрезам. Покажем это на примере рассмотрев 3 наиболее характерные схемы напластований грунтов приведенные на рис. Площадка сложена одним или несколькими слоями прочных грунтов при этом строительные свойства каждого последующего слоя не хуже свойств предыдущего. В этом случае глубина заложения фундамента принимается минимальной допускаемой при учёте сезонного промерзания грунтов и конструктивных особенностей сооружения рис.
29029. Учёт глубины сезонного промерзания грунтов при выборе глубины заложения фундаментов зданий и сооружений 20.5 KB
  Учёт глубины сезонного промерзания грунтов при выборе глубины заложения фундаментов зданий и сооружений. Глубина заложения фундамента из условия промерзания грунтов назначается в зависимости от их вида состояния начальной влажности и уровня подземных вод в период промерзания. Как непучинистые рассматриваются также пески мелкие и пылеватые с любой влажностью а также супеси твёрдой консистенции если уровень подземных вод во время промерзания находится от спланированной отметки земли на глубине равной расчётной глубине промерзания плюс 2 м...
29030. Определение глубины заложения фундаментов с учётом конструктивных особенностей сооружения, включая глубину прокладки подземных коммуникаций, наличие и глубину заложения соседних фундаментов 31.5 KB
  Определение глубины заложения фундаментов с учётом конструктивных особенностей сооружения включая глубину прокладки подземных коммуникаций наличие и глубину заложения соседних фундаментов. Основными конструктивными особенностями возводимого сооружения влияющими на глубину заложения его фундамента являются: наличие и размеры подвальных помещений приямков или фундаментов под оборудование; глубина заложения фундаментов примыкающих сооружений; наличие и глубина прокладки подземных коммуникаций. В зданиях с подвалом или полуподвалом а также...
29031. Определение размеров подошвы центрально нагруженных фундаментов мелкого заложения 63.5 KB
  Реактивное давление грунта по подошве жёсткого центрально нагруженного фундамента принимается равномерно распределённым интенсивностью: 1 где NoII расчётная вертикальная нагрузка на уровне обреза фундамента; GfII и GgII расчётные значения веса фундамента и грунта на его уступах см.1; А площадь подошвы фундамента. Площадь подошвы фундамента при его расчёте по второму предельному состоянию по деформациям определяется из условия: pII ≤ R 2 где R расчётное сопротивление грунта основания. Поскольку обе части неравенства 2...
29032. Определение размеров подошвы внецентренно нагруженных фундаментов мелкого заложения. Эпюры давлений под подошвой фундамента. Порядок расчёта 33 KB
  Эпюры давлений под подошвой фундамента. При расчёте давление по подошве внецентренно нагруженного фундамента принимают изменяющимся по линейному закону а его краевые значения при действии момента сил относительно одной из главных осей определяют как для случая внецентренного сжатия по формуле: 1 Подстановкой значений А=l·b W=b2l 6 и M=NII·e формула 1 приводится к виду 2 2 где NII суммарная вертикальная нагрузка на основание включая вес фундамента и грунта на его уступах; A площадь подошвы фундамента; е эксцентриситет...
29033. Гидроизоляция фундаментов. Защита подвальных помещений от сырости и подтопления подземными водами 42 KB
  Гидроизоляция фундаментов. Гидроизоляция предназначается для обеспечения водонепроницаемости сооружений антифильтрационная гидроизоляция а также защиты от коррозии и разрушения материалов фундаментов и подземных конструкций от агрессивных подземных вод антикоррозионная гидроизоляция. Гидроизоляция от сырости и грунтовых вод подвальных и заглубленных помещений является значительно более сложной выбор такой гидроизоляции зависит от гидрогеологических условий строительной площадки уровня подземных вод их агрессивности особенностей...
29034. Расчёт фундаментов по второй группе предельных состояний. Определение конечной осадки фундаментов мелкого заложения методом послойного суммирования 34 KB
  Расчёт оснований фундаментов по второй группе предельных состояний по деформациям производится исходя из условия: s ≤ su 1 где s конечная стабилизированная осадка фундамента определённая расчётом; su предельное значение осадки устанавливаемое соответствующими нормативными документами или требованиями проекта. После определения размеров подошвы фундамента и проверки условия pII ≤ R где рII среднее давление на основание по подошве фундамента a R расчётное сопротивление грунта ось фундамента совмещают с литологической колонкой...
29035. Расчёт фундаментов по второй группе предельных состояний. Определение конечной осадки фундаментов мелкого заложения методом эквивалентного слоя 31.5 KB
  Расчёт фундаментов по второй группе предельных состояний по деформациям заключается в выполнении условия s ≤ sw 1 где s конечная стабилизированная осадка фундамента определённая расчётом; sw предельное значение осадки устанавливаемое соответствующими нормативными документами или требованиями проекта. Конечная стабилизированная осадка фундамента может быть определена методом эквивалентного слоя. Осадка с учётом жёсткости и формы подошвы фундамента в случае однородного основания определяется по формуле: s=p0hэmv 2 где p0 ...
29036. Определение расчётного сопротивления грунтов основания по таблицам СНиП 23 KB
  Тип песчаного грунта пески гравелистые крупные средней крупности и т. Плотность сложения песчаного грунта плотный средней плотности рыхлый. Устанавливается по таблице в зависимости от типа песчаного грунта и его коэффициента пористости: 1 где γ – удельный вес грунта; γs – удельный вес твердых частиц; w – влажность грунта. Степень влажности песчаного грунта Sr маловлажный влажный насыщенный водой: 2 где γs – удельный вес воды.