Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лобораторні Pascal.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
530.94 Кб
Скачать

Лабораторна робота № 5. Складні типи даних: записи. Короткі теоретичні відомості.

1. Записи.

Запис - це набір різнотипних даних, що об’єднані спільним іменем. Більш формально, запис містить визначене число компонент, що називаються полями.

У визначенні типу запису задається ім’я і тип кожного поля запису:

<комбінований тип >::= Record < список описань полів > End

<список полів>::= <фіксов. част.> | <фіксов. част.>;<варіант. част.> | <варіант. част.>

<фіксована частина >::= <секція запису > {,<секція запису >}

< секція запису >::= <ім’я поля >{,<ім’я поля >}:< тип > < пусто >

Синтаксис записів, що містять варіантну частину - записів з варіантами - ми визначимо нижче. Відповідні синтаксичні діаграми записів з варіантами:

К омбінований

тип

Фіксована частина

Приклад 1

Type Name = array [1..15] of Char;

Student = Record

F1,F2,F3 : Name;

Day : 1..31;

Month : 1..12;

Year : integer;

StudDoc : integer

end;

Var Group : array [1..25] of student;

S : Student;

При позначенні компоненти запису в програмі слідом за іменем запису ставиться точка, а потім ім’я відповідного поля. Таким чином здійснюється доступ до цієї компоненти. Наприклад:

S.Year := Group[i + 1].Year;

Запис може входити у склад даних більш складної структури. Можна говорити, наприклад, про масиви і файли, що складаються з записів. Запис може бути полем іншого запису.

2 .Записи з варіантами.

Синтаксис комбінованого типу містить і варіантну частину, що припускає можливість визначення типу, який містить визначення декількох варіантів структури. Наприклад, запис у комп’ютерному каталозі бібліотеки може мати наступну структуру:

Фіксована частина

Прізвище Ім’я по батькові

{автора}

Назва

{книги}

Видавництво

{його атрибути}

Шифр

{бібліотеки}

Стан

(видана, у фонді, в архіві)

Варіантна частина

Значення признака

видана

у фонді

в архіві

Поля Варіантної

части

Прізвище ім’я, по батькові

N% {чит.квитка}

Дата {видачі}

адрес {схову}

ім’я {архіву}

адрес {схову}

дата {архівації)

Синтаксис варіантної частини:

<варіантна частина >::= case <поле ознаки > <ім’я типа > of < варіант >{;<варіант >}

< варіант >::=<список міток варіанта >:(<список полів >) _ < пусто >

<список міток варіанта >::=<мітка варіанта >{;<мітка варіанта >}

<мітка варіанта >::=< константа >

<поле ознаки >::=<ім’я >:< пусто >

Відповідні синтаксичні діаграми:

Варіантна

ч астина

поле варіант

о знаки

Описання типу запису в розглянутому прикладі може мати вид:

Приклад

Book = record

Author : FullName; {фіксована частина}

BookName: String;

BookCode: Code;

Station : (Readed, inFile, inArchive);

case Station of {поле ознаки}

Readed: Reader : FullName; {варіантна частина}

ReadCode : Integer;

ReadDate : Date;

inFile: FilAdress : Adress;

inArc : ArcName : Srting;

ArcAdress: Adress

end

end;

У нашому прикладі на варіанти вказує поле Station. У залежності від значення цього поля запис має ту чи іншу структуру. Це часта ситуація. Звичайно на варіант запису вказує одне з полів фіксованої частини цього запису. Тому синтаксисом допускається скорочення: опис компоненти, що визначає варіант, (яка називається полем ознаки - дискримінантом), включається в заголовок варіанта:

Type BookStation = (Readed, inFile, inArc);

Book = record

Author : FullName;

BookName : String;

BookCode : Code;

case Station : BookStation of

Readed : Reader : FullName;

ReadCode : Integer;

ReadDate : Date;

inFile : FilAdress: Adress;

inArc : ArcName : String;

ArcAdress: Adress

end

end;

Всі імена полів повинні бути різними, навіть якщо вони зустрічаються в різних варіантах. (Наприклад, Author, Reader - імена людей, а FilAdress і ArcAdress - адреси, що вказують на місцезнаходження книги на полках сховища). У випадку, коли один з варіантів не містить варіантної частини, він повинен бути оформлений наступним чином:

EmptyVariant :( ) {EmptyVariant - мітка порожнього варіанта}

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