Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика программирование, учебник.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
22.08 Mб
Скачать

Работа с полями записи

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

Std.Tab := 910678;

Std.Fio := ’Петухов И.М.’;

Std.Data := ’13.01.82’;

Std.Grup := ’ИП-11’;

Std.Stepa := 550.00;

В этой программе формируются сведения о студенте Петухове. К сожалению оператор присваивания в Паскале не поддерживает инструкцию вида - Mstd[1] := Std, что существенно бы упростило работу с записями.

Использование оператора with … do

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

WITH <Переменная типа RECORD> DO <Оператор>;

Используем предыдущий пример для пояснения работы оператора присоединения.

WITH Std

DO BEGIN

Tab := 910678;

Fio := ’Петухов И.М.’;

Data := ’13.01.82’;

Grup := ’ИП-11’;

Stepa := 550.00;

END;

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

Ввод данных в массив записей с клавиатуры

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

FOR I := 1 TO 20

DO BEGIN

WRITELN(’Введите данные о студенте № ’, I:1);

WITH Mstd[I]

DO BEGIN

WRITELN(’Номер зачетной книжки’); READLN(Tab);

WRITELN(’Фамилия И.О.’); READLN(FIO);

WRITELN(’Дата рождения’); READLN(Data);

WRITELN(’Номер группы’); READLN(Grup);

WRITELN(’Размер стипендии, руб.’); READLN(Stepa);

END;

2.3 Вложение записей

Любое из полей записи может в свою очередь быть записью. В этом случае говорят о вложении записей.

Пример 1. Описать структуру данных, изображенных в табл. 2.

Успеваемость группы Таблица 2

Номер зачетной книжки

Аттестация

Дисциплина 1

Дисциплина 2

Дисциплина 3

Дисциплина 4

Дисциплина 5

910678

А

А

Н/А

А

Н/А

910679

А

А

А

Н/А

А

910680

А

А

А

А

А

Эта таблица структурно отличается от табл. 1. В табл. 1 все поля были одного уровня. А в табл. 2 пять полей: Дисциплина 1, Дисциплина 2, Дисциплина 3, Дисциплина 4, Дисциплина 5 – образуют группу, которая подведена под общее имя - Аттестация.

Для создания такой таблицы следует использовать два типа записей ATTASTACIA и 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 : ATTASTACIA

END;

VAR USP: ARRAY[1..20] OF USPEVAEMOST;

Из текста программы видно, что для кодирования результатов аттестации выбран логический тип данных - BOOLEAN. То есть значению “A” аттестован соответствует - TRUE, а ситуации не аттестован “Н/А” соответствует – FALSE.

Существует ограничение на глубину вложения записей - не более 9