Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование 2 семестр 1 курс.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
523.82 Кб
Скачать

Вариантные записи .

Основная идея такой записи – находясь в рамках одной структуры определить в ней несколько альтернативных записей . В общем случае такая запись состоит из двух частей : фиксированной и вариантной .

Фиксированная часть – обычная совокупность полей , стр-ра постоянная . Вариантная часть не является постоянной при использовании , изменяется от значения особого поля – поле признака или поля tag . В зависимости от значения этого поля к фиксированной части может присоединяться один из имеющих вариантов полей вариантной части . Вариантная часть начинается case следует за фиксированной частью . В операторе case указывается имя переменной выбора переписывание варианта , в качестве которого выступает поле признака , указывается тип . После окончания вариантной записи , в записи не могут появляться другие поля . Запись закрывается словом end, которым одновременно закрывается блок case .

Синтаксис описание вариантной записи

Type

«имя типа »=record

Фиксированная часть

«поле 1 »: «тип 1»;

«поле N»: «тип N»;

Вариантная часть

Case «имя переменной»: «тип» of

«значение1» ( «Поле 1.1»: «тип 1.1»; «Поле 2.1»: «тип 2.1»;);

«значение2» ( «Поле 1.1»: «тип 1.1»; ….);

……………….

«значение K» ( «Поле 1.k»: «тип 1.k»; ………..);

End;

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

Пример:

Type

Priznak = (student,teacher);

Member = record

Name: string[40];

Age :byte;

Case st : priznak of

Student : (group: string[7]; kurs :byte );

Teacher : (chair : string [20]; post: string[20]);

End;

Var

Memb :member;

Begin

……

With memb do

Begin

Name:= ‘Петров’;

Age:=20;

St:=Student;

Group:=’АСУ’;

Kurs:=2;

Все поля вариантной части располагаются в одном и том же месте памяти при их хранении. Размер этой памяти определяется самым объемным из вариантов . В нашем случае этим вариантом является вариантTeacher, который занимает 42 байта . В целом запись будет занимать 85 байт .

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

Замечание :

  1. Не рекомендуется работать одновременно с несколькими вариантами одной вариантной записи .

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

Writeln ( memb.group ); ‘АСУ

Writeln (memb.age ); 20

Memb.st:=teacher;

Writeln ( memb.post); ‘’

Writeln (memb.chair); ‘АСУ’

В следствие особого хранения полей вариантов возможно наложение полей одних вариантов на другие .

Продолжая пример , сделаем некоторые операции заполнения полей второго варианта , после чего обратимся к записям первого варианта:

With memb do

Begin

Post:=’доцент ’;

Chair:=’системотехника ’;

Writeln(chair);

Writeln (post);

St:=student;

Writeln(kurs); ‘т’ – #226(следует )226

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

Достоинство :Значительная экономия памяти под запись в целом .

Недостаток : строгий контроль за обращением к разным вариантам записи.

Процедуры и функции

Лекция №3

Подпрограммы. Процедуры. Определение процедур. Подпрограммы. Глобальные и локальные переменные. Формальные и фактические параметры подпрограмм. Параметры-значения, параметры-переменные, параметры-константы. Функции. Определение функций. Структурированные типы данных в качестве параметров подпрограмм.

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

Процедуры .

Синтаксическое описание

Procedure «имя »(«список формальных параметров »);

Label

Const

Type

Var

Begin

«тело процедуры »;

End.