Тип запись. Массивы записей
При выполнении работы необходимо знать:
Теоретический минимум: Тип запись представляет собой сложный (структурированный) тип данных и включает в себя ряд компонент, называемых полями, которые могут быть различных типов. При задании типа записи после зарезервированного слова Record следует указать все поля типа записи и завершить задание типа словом End; Поля отделяются друг от друга точкой с запятой. Количество полей записи может быть любым.
Пример объявления типа запись: Type Data=record {название типа запись Data (дата) } Year: integer; {поле год имеет целый тип} Month: 1..12; {поле месяц имеет тип диапазон от 1 до 12} Day: 1..31; {поле день имеет тип диапазон от 1 до 31} End; {конец описания типа запись} Если несколько полей типа запись имеют один и тот же тип, то их имена можно перечислить через запятую и затем после двоеточия указать этот общий тип:
Type Person=record {название типа запись Person (персона) } Name, Family: string [20]; {поля имя, фамилия человека имеют строковый тип} Sex: (Men, Women); {поле пол имеет перечисляемый тип мужчина, женщина} Age: Byte; {поле возраст имеет целый тип Byte} Married: Boolean; {поле семейное положение имеет логический тип} End; {конец описания типа запись} После введения типа записи можно затем задать переменные или типизированные константы этого типа. При задании значений константе ее поля записываются в круглых скобках через точку с запятой. Для задания значения каждого поля сначала указывается имя поля, а затем через двоеточие – его значение. Так, для описанных выше типов можно задать, например, следующие константы и переменные:
Пример описания констант и переменных типа запись: Const Birthday: Data = (Year: 1971; Month: 9; Day: 24); Ivanov: Person = (Name: ’Михаил’; Family: ‘Иванов’; Sex: Men; Age: 42; Married: True); Var D1, D2, D3: Data; {переменные типа запись Data} Per1, Per2: Person; {переменные типа запись Person}
Доступ к полям записи осуществляется с указанием имени переменной (константы) и имени поля, записываемого через точку, например: Ivanov.Age, Per1.Name, D1.Year, D1.Month, D1.Day и так далее. Пример использования полей записи: Per1.Name: =’Виталий’; Per1.Family: =’Кротов’; Per1.Sex: =Men; Per1.Age: =26; Per1.Married: =False;
Для того, чтобы не вписывать каждый раз имя записи при обращении к ее полям, можно использовать оператор над записями With. Его структура выглядит следующим образом: With < имя записи> do < оператор> В этом случае внутри оператора можно указывать только поле записи, так как имя записи уже названо:
Пример использования оператора над записями With: With Per1 do begin Name: =’Виталий’; Family: =’Кротов’; Sex: =Men; Age: =26; Married: =False; End; Большие группы разнородных данных можно организовать в виде массива записей. Например, используя тип запись Person (персона) объявить одномерный массив из нескольких записей, для того, чтобы хранить информацию о сотрудниках отдела. Пример использования массива типа запись: Type Person=record {название типа запись Person (персона) } Name, Family: string [20]; {поля имя, фамилия человека имеют строковый тип} Sex: (Men, Women); {поле пол имеет перечисляемый тип мужчина, женщина} Age: Byte; {поле возраст имеет целый тип Byte} Married: Boolean; {поле семейное положение имеет логический тип} End; {конец описания типа запись} Var Otdel: array [1..5] of Person; Begin For i: =1 to 5 do begin With Otdel[i] do begin Writeln(‘Введите имя сотрудника ’); Readln(Name); Writeln(‘Введите фамилию сотрудника ’); Readln(Family); Writeln(‘Введите пол ’); Readln(Sex); Writeln(‘Введите возраст ’); Readln(Age); Writeln(‘Введите семейное положение 1 или 0 ’); Readln(Married); End; End;
Задать одномерный массив типа запись для хранения данных о книгах. Запись о каждой книге должна содержать следующие сведения: автор книги, название книги, год издания, количество страниц, цена. Заполнить массив сведениями о книгах, затем найти книги, изданные до определенного года, вывести на экран сведения о них, и книгу с наибольшей ценой. Решение: Следует объявить тип запись «Книги». По условию задачи этот тип запись должен иметь 5 полей: автор книги, название книги, год издания, количество страниц, цена. Полям записи будут присвоены различные типы. Затем следует объявить массив записей. Порядковый номер элементов массива будет соответствовать порядковому номеру записи о книге. В программе нужно сначала заполнить массив сведениями о книгах, а затем обработать этот массив в цикле и найти в нем сведения о книгах, изданных до определенного года (требуемый год необходимо предварительно запросить с клавиатуры у пользователя нашей программы). При поиске будем обращаться к полю «год издания» каждой записи. Затем требуется найти книгу с наибольшей ценой. При этом поиске будем обращаться к полю «цена» каждой записи в массиве, и сравнивать каждую цену с максимумом. Если находиться цена больше, чем мы приняли, то максимум становиться равным этой цене. Таким образом, просмотрев весь массив, найдем книгу с наибольшей ценой. Одновременно с поиском максимальной цены надо запоминать номер элемента массива, у которого цена книги масимальна. Этот номер пригодиться для вывода всех сведений о книге с максимальной ценой. В самом деле, чтобы вывести на экран эти сведения, нужно обратиться к элементу массива записей с нужным номером и вывести значения всех ее полей.
|