Комбинированный тип данных
Комбинированный тип данных – запись (Record) 1 Павловская Т. А. (СПб. ГУИТМО)
Запись − это структурированный тип, описывающий набор данных разных типов Запись состоит из полей. Пример: строка из прайс-листа в магазине (наименование, тип товара, цена, количество). Обращение к полю: ◦ Через точку имя записи. имя поля ◦ В операторе Width
Width STUDENT do Name: =‘RRRRR’; Group: =2; End;
Описание записи Var имя_типа: record описание 1 -го поля записи; описание 2 -го поля записи; . . . описание n-го поля записи; end; 4 Павловская Т. А. (СПб. ГУИТМО)
Примеры описания записей type goods = record name : string [20]; price : real; number : integer; end; var g 1, g 2 : goods; stock : array [1. . 100] of goods; student : record name : string [30]; group : byte; marks : array [1. . 4] of byte; end; STUDENT. Name: =‘Иванов’; 5 Павловская Т. А. (СПб. ГУИТМО)
Действия с записями g 1 : = g 2; G 2. name : = stock[3]; g 1. price : = 200; with g 1 do begin price : = 200; number : = 10 end; Инициализация записей: const g : goods = ( name = ’boots’; price= 200; number= 10 ); 6 Павловская Т. А. (СПб. ГУИТМО)
Пример использования записей Сведения о товарах на складе хранятся в текстовом файле. Для каждого товара отводится одна строка, в первых 20 позициях которой записано наименование товара, а затем через произвольное количество пробелов его цена и количество единиц. Программа по запросу выдает сведения о товаре или сообщение о том, что товар не найден. Program SKLAD; const Max_n = 100; type str 20 = string [20]; goods = record name : str 20; price : real; number : integer; end; 7 Павловская Т. А. (СПб. ГУИТМО)
var stock : array[1. . Max_n] of goods; i, j, len : integer; name : str 20; 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 writeln(’Переполнение массива’); exit end; 8 Павловская Т. А. (СПб. ГУИТМО)
while true do begin writeln('Введите наименование'); Readln(name); len : = length(name); if len = 0 then break; for j : = len + 1 to 20 do name : = name + ' '; found : = false; for j : = 1 to i - 1 do begin 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 ('Товар не найден'); end. 9 Павловская Т. А. (СПб. ГУИТМО)
Записи с вариантной частью type contact = record name : string [40]; tel : string [15]; case i : integer of 0: (post: string [20]); 1: (date: string [10]; code: word); end; name tel i 10 Павловская Т. А. (СПб. ГУИТМО)
Пример вариантной записи type figure = (rect, triangle, circle); shape = record x, y : real; case kind : figure of rect : (height, width : real); triangle : (x 2, y 2, x 3, y 3 : real); circle : (radius : real); end; 11 Павловская Т. А. (СПб. ГУИТМО)

