Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SAOD..doc
Скачиваний:
142
Добавлен:
11.05.2015
Размер:
959.49 Кб
Скачать

2.5 Записи

Дата рождения Получение Экзамен стипендии оценка

z—£

10

Г1..10,1..5"|

Ф

При обработке данных часто бывает необходимо собрать в одну коллекцию разнотипные данные. Для это­го используются структурированные типы данных: записи – в Паскале, структуры – в Си. Например, информа­ция о студентах (рис. 2).

Код

/\

Гр. NOM Си Г N

Рис. 2 Информация о студенте

Структура – иерархически упорядоченная коллекция данных. Важно не только то, что данные разных ти­пов, но и что они располагаются на определенных уровнях. Элементами записей могут быть:

  • скалярные данные;

  • массивы;

  • записи. Различные составные типы могут комбинироваться различными способами.

Объявление записей

В Паскале составной структурированный тип – запись – определяется описанием типа.

TYPE T = RECORD

51 : T1;

52 : T2;

END;

Например, дата рождения

TYPE DAT = RECORD DEN : 1..31; MES : 1..12; GOD : 1950..2050 END; TYPE CODS = RECORD GR : RECORD

FAC, SP, GOD : CHAR; NOMG : 1..2 END;

NOM : INTEGER END;

Можно объявить тип записи TYPE STUDENT = RECORD

COD : CODS;

FIO : RECORD

FA, IM, OT : STRING[1..15];

END;

DR : DAT;

STIP : ARRAY[1..10] OF BOOLEAN;

EXAM : ARRAY[1..5] OF (0, 2, 3, 4, 5)

{ НЕ АТТ., НЕУД., УД., ХОР., ОТЛ. } END;

Теперь объявим переменные

VAR DECANAT : ARRAY[1..1000] OF STUDENT;

STUD : STUDENT;

FSTUD : FILE OF STUDENT;

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

Например,

STUD.FIO.IM := 'БОРИС'; или

IF DEKANAT[I].STIP[4] THEN { получает } ELSE { нет } или

STUD := DEKANAT[274]; - пересылается вся запись из 274-го элемента массива DEKANAT в перемен­ную STUD.

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

WITH - оператор присоединения

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

Сократить описание позволяет оператор присоединения, имеющий вид:

WITH R DO S, где WITH, DO – служебные слова; R – список имен записи (через запятую); S – любой оператор Паскаля.

Смысл: внутри оператора S имена полей записи можно использовать без префикса (имени записи и, воз­можно, имен старших подзаписей). Считается, что все они ссылаются на переменную R.

Например

WITH SDUT, FIO DO BEGIN

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

IM := 'Петр';

OT :='Борисович' end;

Оператор

WITH R1, R2, ..., RN DO S эквивалентен WITH R1 DO

WITH R2 DO

WITH RN DO S; Запись и массив имеют общее свойство: оба являются структурами с произвольным доступом. Запись – более универсальная структура, т.к. не требуется, чтобы типы всех её компонент были одинако­выми.

С другой стороны, массив предоставляет большие возможности, поскольку селекторы его компонент мо­гут вычисляться (если они представлены выражениями), тогда как селекторы компонент записи – это фиксиро­ванные идентификаторы, задаваемые в описании типа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]