2 Записи.ppt
- Количество слайдов: 23
Записи слайд 16 Продолжая изучение структурированных типов данных, переходим к записям. Как и массивы, записи являются структурами прямого доступа, однако, в отличие от массивов, могут хранить элементы, относящиеся к разным типам данных.
В практике программирования приходится иметь дело с данными, которые естественным образом состоят из других данных. Например, сведения о студенте содержат l фамилию, имя, отчество, l дату рождения, l домашний адрес, l номер группы, шифр специальности. Для представления подобной информации в языке Паскаль используется тип «запись» (Record).
Запись – это структура данных, состоящая из отдельных компонентов разного типа, называемых полями. Объявление записи Тип запись определяется в разделе Type.
Описание типа «запись» : Type <Имя записи> = record <поле 1> : <тип поля 1>; [<поле 2> : <тип поля 2>; ]. . . [<поле. N> : <тип поля. N>] end;
гдe: Имя записи — имя типа-записи; record — слово языка Pascal, означающее, что далее следует описание компонентов (полей) записи; поле i и тиn i — имя и тип i-ro компонента (поля) записи; end — слово языка Pascal, означающее, что список полей закончен.
Примеры описаний записи: Tyре person = record fam : string [20]; name : string [15]; rost : word; ves : word; address : string[50]; end;
Примеры описаний записи: (2) Type Data = record Year: word; Month: 1. . 12; Day: 1. . 31; end;
После объявления типа объявляют переменные типа «запись» : Var student, girl : person; birthday, prazdnik : date; Чтобы использовать в программе элемент (поле) переменной-записи, указывают имя переменной и имя поля, отделяя имя поля от имени переменной точкой. Например, инструкция: Write (student. fam, ‘ ‘ , student. name); выводит на экран содержимое полей fam и name переменной-записи student.
Имена полей могут совпадать с именами других переменных, поскольку на самом деле являются составными: <имя_записи>. <имя_поля> Поэтому можно записать: var x: real; r: record x: integer; y: real end;
Если несколько подряд идущих полей принадлежат к одному типу данных, их описания можно объединить: var <имя_записи>: record <имя_поля 1>, …, <имя_поля. N>: <тип_полей>; <имя_поля. S>: <тип_поля. S>; . . . end;
Var zap 1: record x, y : real; i, j, k : integer; flag : boolean; a: array [1. . 100] of byte; data: record day: 1. . 31; month: 1. . 12; year: 1900. . 2100; end; Эта запись содержит 8 полей, два из которых сами являются составными.
Задание записей константой Как и массивы, записи не могут быть заданы неименованной или нетипизированной константой. Для того чтобы задать запись типизированной константой, следует вначале описать соответствующий тип в разделе 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: 1992);
Доступ к полям Обратиться к полю записи можно следующим способом: <имя_записи>. <имя_поля> Например: Month : = my_birthday. month +1;
Оперирование несколькими полями Если программе предстоит несколько раз подряд обращаться к полям одной и той же записи, может оказаться неудобным записывать это обращение полностью: my_birthday. day : = 17; my_birthday. month : = 3; my_birthday. year : = 2010;
Для сокращения таких участков служит оператор with, позволяющий обращаться к полям, не указывая каждый раз имя всей записи: with my_birthday do begin day: = 17; month: = 3; year: = 2004; end;
где with — слово языка Pascal, означающее, что далее, до слова end, при обращении к полям переменной-записи Имя можно не указывать имя записи; Имя — имя переменной-записи.
Для того чтобы внутри оператора with можно было обратиться не к полю записи, а к глобальной переменной с таким же именем, перед этой переменной нужно указать (через точку) имя программы: <имя_программы>. <имя_переменной> Например: with my_birthday do begin day : = 17; month : = 3; {поле записи birthday. month} year : = 1992; programma. month : = 5; {глобальная переменная month} end;
Запись с вариантной частью Если заранее известно, что в массиве записей (таблице) некоторые поля могут оставаться пустыми (наборы пустых полей могут быть разными для разных записей), то вполне понятно желание как-то сократить неиспользуемый, но занимаемый объем памяти. Специально для таких случаев существуют записи с вариантной частью.
Описание записи с вариантной частью var <имя_записи>: record <поле 1>: <тип 1>; [<поле 2>: <тип 2>; ] [. . . ] case <поле_переключатель>: <тип> of <варианты1>: (<поле 3>: <тип 3>; <поле 4>: <тип 4>; . . . ); <варианты2>: (<поле 5>: <тип 5>; <поле 6>: <тип 6>; . . . ); [. . . ] end;
l Объявление типа-записи l Объявление переменной типа запись l Заполнение и вывод полей записи Рассмотрим на примере программы Record. pas


