Множества

Записи

В программах часто возникает необходимость логического объединения данных. Например, база данных предприятия содержит для каждого сотрудника его фамилию, дату рождения, должность, оклад и так далее. Однотипные данные организуются в массивы, а для объединения разнотипных данных предназначен тип "запись". Он вводится с помощью ключевого слова record. Элементы записи называются полями:

type имя_типа = record описание 1-го поля записи; описание 2-го поля записи; ... описание n-го поля записи;end;

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

type goods = record name : string[20]; price : real; number: integer;end;

Переменные типа "запись" описываются обычным образом. Можно задавать описание типа при описании переменной, создавать массивы из записей, записи из массивов:

var g1, g2 : goods; stock : array [1 .. 100] of goods; student : record name : string [30]; group : byte; marks : array [1 .. 4] of byte; end;

Можно присваивать одну запись другой, если они одного типа, например:

g1 := g2;g2 := stock[3];

Все остальные действия выполняются с отдельными полями записи. Есть два способа доступа к полю записи: либо с помощью конструкции имя_записи.имя_поля, либо с использованием оператора присоединения with, например:

g1.price := 200;with g1 do begin price := 200; number := 10end;
Пример 1
  Сведения о товарах на складе хранятся в текстовом файле. Для каждого товара отводится одна строка, в первых 20 позициях которой записано наименование товара, а затем через произвольное количество пробелов его цена и количество единиц. Программа по запросу выдает сведения о товаре или сообщение о том, что товар не найден.
program store;const Max_n = 100;type str20 = string [20]; goods = record name : str20; price : real; number : integer; end;var stock : array[1 .. Max_n] of goods; i, j, len : integer; name : str20; found : boolean; f : text;begin assign(f, 'stock.txt'); reset(f); i := 1; while not Eof(f) do begin with stock[i] do readln(f, name, price, number); inc(i); if i > Max_n then begin {1} writeln('Переполнение массива'); exit end; end; while true do begin {2} writeln('Введите наименование'); Readln(name); len := length(name); if len = 0 then break; {3} for j := len + 1 to 20 do name := name + ' '; {4} found := false; for j := 1 to i - 1 do begin {5} if name <> stock[j].name then continue; with stock[j] do writeln (name:22, price:7:2, number:5); found := true; break; end; if not found then writeln ('Товар не найден'); {6} end;end.

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

const g : goods = ( name: 'boots'; price: 200; number: 10 );

Множества

Множественный тип данных в языке Паскаль соответствует математическому представлению о множествах: это ограниченная совокупность различных элементов. Множество создается на основе элементов базового типа, он может быть перечисляемым, интервальным или byte. В множестве не может быть более 256 элементов.

Множество описывается с помощью служебных слов set of:

type имя_типа = set of базовый_тип;

Примеры:

type Caps = set of 'A' .. 'Z'; Colors = set of (RED, GREEN, BLUE); Numbers = set of byte;

Принадлежность переменных к множественному типу может быть определена прямо в разделе описания переменных, например:

var oct : set of 0 .. 7;

Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например:

['A', 'D'] [1, 3, 6] [2, 3, 10 .. 13].

Константа вида [ ] означает пустое подмножество.

Тип "множество" задает набор всех возможных подмножеств его элементов, включая пустое. Если базовый тип, на котором строится множество, имеет k элементов, то число подмножеств, входящих в это множество, равно 2k.

Переменная множественного типа содержит одно конкретное подмножество значений множества. Пусть имеется переменная bинтервального типа:

var b : 1 .. 3;

Эта переменная может принимать три различных значения: 1, 2 или 3. Переменная m множественного типа

var m : set of 1 .. 3;

может принимать восемь различных значений:

[ ] [1] [2] [3] [1, 2] [1, 3] [2, 3] [1, 2, 3]

Порядок перечисления элементов базового типа в константах безразличен.