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

Лекция 9. Записи, множества

1.Назначение записей.

2.Сравнение массива и записи.

3.Синтаксис объявления записи.

4.Доступ к полям записи.

5.Массивы записей.

6.Множественный тип.

7.Операции над множествами.

Назначение

Записи относятся к структурным типам, более того, собственно они и являются структурами в их классическом понимании, поэтому часто вместо термина «запись» используется синоним – «структура».

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

Запись, как и массив, относится к структурным типам (нет предопределенного имени типа), поэтому требуется предварительное объявление типа.

Сопоставление свойств массива и записи приведено ниже.

Сравнение массива и записи.

Массив

Упорядоченная

совокупность

Размерность массива произвольная

Одинаковый тип элементов

Одинаковые имена элементов, совпадающие с именем массива

Доступ к элементам– <имя_массива>[<индекс>]

Над массивом в целом допустима только операция присваивания

Запись

Порядок безразличен

Размерность записи фиксирована и изменена быть не может

Разный тип полей – элементов записи

Различные имена полей записи

Доступ к полям- <имя_записи>.<имя_поля>

Над записью в целом допустима только операция присваивания

Синтаксис объявления записи

// С предварительным объявлением типа

Type <Имя_типа>=record

[<имя_поля1> : <тип_поля1>;] [<имя_поля2> : <тип_поля2>;]

. . . . . . . . . . . . . .

[<имя_поляN> : <тип_поляN>;] [<вариантная_часть>]

end; // Внимание! END не парный

Var <Имя_записи> : <Имя_типа>;

// Допускается без предварительного объявления

Var <Имя_типа> : record

[<имя_поля1> : <тип_поля1>;] // см. пример выше

end;

Type

TDate=record

Day : 1..31;

Mon : 1..12;

Yea : 1900..2099; end;

TMan=record

FIO

: string;

BDay

: TDate;

Addr

: record

case

byte of // Вариантная часть

1:(City_Home : string[255];

Tel : 1000000..9999999);

2:(Tel_Mobile : 1000000000..9999999999); end;

//Переменные

Var Stud1, Stud2 : TMan;

Доступ к полям записи.

Доступ к полям – элементам записи может быть осуществлен двумя способами: через точку – разделитель и с помощью оператора

with <имя переменной> do <оператор>.

Точка – разделитель ставится между именем переменной и именем поля. В том случае, когда поле само является структурой нижнего уровня, снова ставится точка и цепочка продолжается, пока не будет достигнуто нужное поле. Например, чтобы получить доступ к полю Day для переменной Stud1 надо указать цепочку

Stud1.BDay.Day.

Если поле структуры является операндом в выражении, то проще использовать оператор

with Stud1 do BDay.Day:=31;

Или так

with Stud1, BDay do Day:=31;

Инициализация полей записи

BEGIN

// Ввод для Stud1 (разделитель - точка) write(' FIO 1 = '); readln(Stud1.FIO); write(' Birthday in Format: DD MM YYYY = ');

readln(Stud1.BDay.Day, Stud1.BDay.Mon,

Stud1.BDay.Yea); write(' City Home = ');

readln(Stud1.Addr.Tel, Stud1.Addr.City_Home); // Вывод для Stud1 (разделитель - точка)

writeln(Stud1.FIO);

writeln(' Birthday ', Stud1.BDay.Day,'/',Stud1.BDay.Mon,'/',

Stud1.BDay.Yea);

writeln(' Index City/Home Tel');

writeln(Stud1.Addr.PInd, Stud1.Addr.City_Home, Stud1.Addr.Tel);

//Ввод для Stud2 (с префиксом With Stud2) with Stud2 do

begin

write(' FIO 2 = '); readln(FIO);

write(' Birthday in Format: DD MM YYYY = '); with BDay do readln(Day, Mon, Yea);

write(' City Home = ');

with Addr do readln(Tel, City_Home);

//Вывод для Stud2 (с префиксом With Stud2) writeln(FIO);

with BDay do writeln(' Birthday ',

Day,'/',Mon,'/',Yea); writeln(' City/Home Tel');

with Addr do writeln(City_Home, Tel); end;

readln;

END.

Массивы записей

Задача.

Сформировать массив студентов заданной специальности, содержащий общие сведения и данные об успеваемости

Type TStud=record

man : Tman; gr : string;

bm, bf, bx : 0..5; end;

TAStud=array[1..27] of TStud; Var ZI1 : TAStud;

nstud, i, j : 1..27;