Опубликован: 06.09.2005 | Доступ: свободный | Студентов: 11879 / 755 | Оценка: 3.98 / 3.46 | Длительность: 12:50:00
ISBN: 978-5-9556-0025-3
Лекция 7:

Записи. Бинарные файлы

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Аннотация: Использование таблиц с разнотипными полями. Работа с бинарными файлами.

Записи

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

Как и массивы, записи являются структурами прямого доступа, однако, в отличие от массивов, могут хранить элементы, относящиеся к разным типам данных.

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

Описание записей

В разделе var переменную типа запись описывают так:

var <имя_записи>: record <имя_поля1>: <тип_поля1>;
                                     [<имя_поля2>: <тип_поля2>;]
                                     [...]
                          end;

Имена полей должны подчиняться общим правилам построения идентификаторов. Повторение имен полей внутри одной записи не допускается.

Замечание: Имена полей могут совпадать с именами других переменных, поскольку на самом деле являются составными:

<имя_записи>.<имя_поля>.

Поэтому можно записать:

var x: real;
    r: record x: real; 
              y: real
       end;

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

Если несколько подряд идущих полей принадлежат к одному типу данных, их описания можно объединить:

var <имя_записи>: record <имя_поля1>,_,<имя_поляN>: <тип_полей>;
                                <имя_поляS>: <тип_поляS>;
                                 ...
                        end;

Например:

var zap1: record x,y: real;
                        i,j,k: integer;
                        flag: boolean;
                        s: set of 'a'..'z';
                        a: array[1..100] of byte;
                        data: record day:1..31;
                                            month: 1..12;
                                            year: 1900..2100;
                              end;
          end;

Эта запись содержит 9 полей, три из которых сами являются составными.

Наиболее распространенный способ использования записей - двумерная таблица, каждый столбец которой имеет свой тип. Такую структуру описывают, например, следующим образом:

var tabl: array[1..100] of zap1;

Задание записей константой

Как и массивы, записи не могут быть заданы неименованной или нетипизированной константой.

Для того чтобы задать запись типизированной константой, следует вначале описать соответствующий тип в разделе type, а затем воспользоваться им в разделе const:

type <имя_типа> = record <имя_поля1>: <тип_поля1>;
                                     [<имя_поля2>: <тип_поля2>;]
                                     [...]
                          end;
const <имя_константы>: <имя_типа> = <начальное_значение>;

Начальное значение для переменной типа запись задается перечислением в круглых скобках начальных значений для всех полей (соответствующих типов!) с обязательным указанием имени задаваемого поля. Имя поля от его начального значения отделяется двоеточием, значения соседних полей разделяются точкой с запятой:

(<имя_поля1>: <значение_поля1>; _; <имя_поляN>: <значение_поляN>);

Например:

type data = record day:   1..31;
                             month: 1..12;
                             year:  1900..2100;
              end;
const my_birthday: data = (day:17; month:3; year:2004);

Можно, конечно, не описывать тип константы отдельно, а объединить оба определения:

const my_birthday: record day:   1..31;
									  month: 1..12;
									  year:  1900..2100;
							 end; 
		= (day:17; month:3; year:2004);

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

type family = (mother, father, child);
const birthdays : array[family] of data 
		= ((day: 8; month: 3; year: 1975),
			(day: 23; month: 2; year: 1970),
			(day: 1; month: 9; year: 2000));
< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Евгения Поздеева
Евгения Поздеева
Ольга Стебакова
Ольга Стебакова

Вот фрагмент лекции 5 (статья 4):

Проверка множества на пустоту может быть осуществлена довольно просто:

pusto:= true;   for i:= 1 to N do 

if set_arr[i] then begin pusto:= false; break end; {мне кажется здесь должно быть так:

if set_arr[i]<>0 then begin pusto:= false; break end;}

Хотелось бы знать это ошибка в теории или я просто не поняла лекцию?

Оксана Пагина
Оксана Пагина
Россия, Москва
Иван Огородников
Иван Огородников
Россия, Ханты-Мансийск