как получить сертификат после завершения экзамен-экспрессом |
Типы данных, определяемые программистом
Записи
В программах часто возникает необходимость логического объединения разнородных данных (например, база данных предприятия содержит для каждого сотрудника его фамилию, дату рождения, должность, оклад и т. д.). Для этого предназначен тип 'запись'. Он вводится с помощью ключевого слова 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 := 10 end;
Пример. Сведения о товарах на складе хранятся в текстовом файле. Для каждого товара отводится одна строка, в первых 20 позициях которой записано наименование товара, а затем через произвольное количество пробелов его цена и количество единиц. Программа по запросу выдает сведения о товаре или сообщение о том, что товар не найден ( пример 3.5).
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.Листинг 3.5.
Инициализация записей выполняется в разделе констант, при этом для каждого поля задается его имя, после которого через двоеточие указывается значение.
const g : goods = (name : 'boots'; price : 200; number : 10);
Множества
Множественный тип данных в языке Паскаль соответствует математическому представлению о множествах: это ограниченная совокупность различных элементов. Множество создается на основе элементов базового типа — это может быть перечисляемый тип, интервальный или byte. В множестве не может быть более 256 элементов, а их порядковые номера должны лежать в пределах от 0 до 255.
Множество описывается с помощью служебных слов 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;
Тип 'множество' задает набор всех возможных подмножеств его элементов, включая пустое. Если базовый тип, на котором строится множество, имеет k элементов, то число подмножеств, входящих в это множество, равно 2k.
Константы множественного типа записываются в виде заключенной в квадратные скобки последовательности элементов или интервалов базового типа, разделенных запятыми, например:
['A', 'D'] [1, 3, 6] [2, 3, 10 .. 13].
Порядок перечисления элементов базового типа в константах не имеет значения. Константа вида [ ] означает пустое подмножество. Переменная типа 'множество' содержит одно конкретное подмножество значений множества. Пусть имеется переменная 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]