Из предыдущего примера легко заметить, что при каждом обращении к полю записи следует указывать имя этой записи. Если вы работаете с полями одной и той же записи, то этой проблемы можно избежать благодаря оператору присоединения WITH, который имеет следующую синтаксическую структуру.
WITH <Переменная типа RECORD> DO <Оператор>;
Используем предыдущий пример для пояснения работы оператора присоединения.
WITH Std
DO BEGIN
Tab := 910678;
Fio := 'Петухов И.М.';
Data :='13.01.82';
Group :='ИП-11';
Stepa := 550.00;
END;
Проще эта запись, чем предыдущая или нет пусть для себя решает сам программист. С позиций надежности программы (имеется в виду ее устойчивость к неизбежной коррекции исходного кода) предыдущий пример лучше, так как не допускает альтернатив при совпадающих названиях имен полей различных записей.
Ввод данных в массив записей с клавиатуры.
Для ввода данных с клавиатуры в массив записей Mstd о 20 студентах удобно использовать оператор арифметического цикла совместно с оператором присоединения, что видно на следующем примере.
FOR I:=1 TO 20
DO BEGIN
WRITELN('Введите данные о студенте № ', 1:1);
WITH Mstd[I] DO
BEGIN
WRITELN('Hoмер зачетной книжки');
READLN(Tab);
WRITELN('Фамилия И.О.');
READLN(FIO);
WRITELN('Дата рождения');
READLN(Data);
WRITELN('Номер группы');
READLN(Group);
WRITELN('Размер стипендии, руб.');
READLN(Stepa);
END;
Вложение записей.
Любое из полей записи может в свою очередь быть записью. В этом случае говорят о вложении записей.
Пример 17. Описать структуру данных, изображенных в табл. 3.2.
Эта таблица структурно отличается от табл. 3.1. В табл. 3.1 все поля были одного уровня. А в табл. 3.2 пять полей: Дисциплина 1, Дисциплина 2, Дисциплина 3, Дисциплина 4, Дисциплина 5 - образуют группу, которая подведена под общее имя — Аттестация.
Для создания такой таблицы следует использовать два типа записей ATTESTACIA и USPEVAEMOST. При этом порядок объявления этих записей существенен. Первой объявляется та запись, на которую ниже по тексту программы будет ссылка.
TYPE ATTASTACIA = RECORD
D1: BOOLEAN; {Дисциплина 1}
D2: BOOLEAN; {Дисциплина 2}
D3: BOOLEAN; {Дисциплина 3}
D4 : BOOLEAN; {Дисциплина 4}
D5: BOOLEAN; {Дисциплина 5}
END;
USPEVAEMOST = RECORD
TAB : LONGINT; {Номер зачетной книжки}
ATT : ATTESTACIA
END;
VAR USP: ARRAY[1..20] OF USPEVAEMOST;
Из текста программы видно, что для кодирования результатов аттестации выбран логический тип данных — BOOLEAN. То есть значению 'А' — аттестован соответствует TRUE, а ситуации не аттестован — 'Н/А' соответствует FALSE. Если Вам понадобиться заправка картриджей OKI обращайтесь к опытным специалистам, которые все сделают по доступным ценам. Существует ограничение на глубину вложения записей — не более 9.
Присвоение значений полям вложенных записей.
Ниже приведен пример прямого присвоения значений полям первой записи USP[1] в массиве записей USP - успеваемость группы. Уровень вложения соответствует числу разделителей имен, то есть точек в идентификаторе поля.
USP[1].TAB:= 910678; {Уровень вложения 1}
USP[1].ATT.D1:= TRUE; {Уровень вложения 2}
USP[1].ATT.D2:= TRUE;
USP[1].ATT.D3:= FALSE;
USP[1].ATT.D4:= TRUE;
USP[1].ATT.D5:= FALSE;
Используем оператор WITH для этого же примера.
WITH USP[1] {Уровень вложения 1}
DO BEGIN
TAB :=910678;
WITH ATT DO BEGIN {Уровень вложения 2}
D1:=TRUE;
D2:=TRUE;
D3:=FALSE;
D4:=TRUE;
D5:=FALSE;
END
END;
Комментарии