Как правильно объявить тип запись и переменные типа запись
Как обращаться к полям записи
Как организовать работу с массивом записей
Теоретический минимум:
Тип запись представляет собой сложный (структурированный) тип данных и включает в себя ряд компонент, называемых полями, которые могут быть различных типов. При задании типа записи после зарезервированного слова 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; {конец описания типа запись}
После введения типа записи можно затем задать переменные или типизированные константы этого типа.
При задании значений константе ее поля записываются в круглых скобках через точку с запятой. Для задания значения каждого поля сначала указывается имя поля , а затем через двоеточие – его значение. Так, для описанных выше типов можно задать, например, следующие константы и переменные:
Пример описания констант и переменных типа запись:
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:
WithPer1 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; {конец описания типа запись}
VarOtdel: 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;
Задача 11.
Задать одномерный массив типа запись для хранения данных о книгах. Запись о каждой книге должна содержать следующие сведения: автор книги, название книги, год издания, количество страниц, цена. Заполнить массив сведениями о книгах, затем найти книги, изданные до определенного года, вывести на экран сведения о них, и книгу с наибольшей ценой.
Решение:
Следует объявить тип запись «Книги». По условию задачи этот тип запись должен иметь 5 полей: автор книги, название книги, год издания, количество страниц, цена. Полям записи будут присвоены различные типы. Затем следует объявить массив записей. Порядковый номер элементов массива будет соответствовать порядковому номеру записи о книге.
В программе нужно сначала заполнить массив сведениями о книгах, а затем обработать этот массив в цикле и найти в нем сведения о книгах, изданных до определенного года (требуемый год необходимо предварительно запросить с клавиатуры у пользователя нашей программы). При поиске будем обращаться к полю «год издания» каждой записи.
Затем требуется найти книгу с наибольшей ценой. При этом поиске будем обращаться к полю «цена» каждой записи в массиве, и сравнивать каждую цену с максимумом. Если находиться цена больше, чем мы приняли, то максимум становиться равным этой цене. Таким образом, просмотрев весь массив, найдем книгу с наибольшей ценой. Одновременно с поиском максимальной цены надо запоминать номер элемента массива, у которого цена книги масимальна. Этот номер пригодиться для вывода всех сведений о книге с максимальной ценой. В самом деле, чтобы вывести на экран эти сведения, нужно обратиться к элементу массива записей с нужным номером и вывести значения всех ее полей.