Комбинированный тип данных
Информацию о номере дома, названии улицы и городе в единое целое и назвать адресом, а объединенную информацию о дне, месяце и годе рождения – датой рождения. Примечание: Запись и массив схожи в том, что обе эти структуры составлены из ряда отдельных компонент. В то же время, если компоненты массива должны быть одного типа, записи могут содержать компоненты разных типов.
Var Record End Var Address : Record HouseNumber : Integer; StreetName, CityName : String[20]; PeopleName : String; End; полем Примечание: Каждая компонента записи называется полем. В переменной записи Address поле с именем HouseNumber само является переменной типа Integer, поле StreetName - двадцати символьной строкой и т.д.
Для того чтобы обратиться к некоторому полю записи, следует написать имя переменной и имя поля. Эти два идентификатора должны разделяться точкой.Примеры: Address.HouseNumber := 45; Address.StreetName := 'Профсоюзная'; Address.CityName := 'Сургут'; Address.PeopleName := 'Петрова Алла Ивановна'; Каждое поле записи Address можно рассматривать как обычную переменную, которую можно напечатать или использовать в расчетах. Вместе с тем запись может использоваться как единое целое. В этом случае надо ввести тип записи.
Type Record Type Date = Record Day : 1..31; Month : (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Year : Integer; End; Var Var HisBirth, MyBirth : Date; HisBirth := MyBirth HisBirth=MyBirth Примечание: В этом случае возможна операция присваивания HisBirth := MyBirth и операция сравнения HisBirth=MyBirth
Procedure Begin End Procedure WriteDate(OneDate : Date); Begin Write(Ord(OneDate.Month)+1); Write('-'); Write(OneDate.Day:2); Write('-'); Write(OneDate.Year:4); End ;
Определение. Var Var Birthdays : Array [1..Persons] of Date; Обращение к элементу. Write(Birthdays[3].Year); Примечание: Поля записи в свою очередь тоже могут быть массивами, множествами, записями.
Type Type Date = Record Day : 1..31; Month :1..12; Year : End; Reminder = Record Message : Array [1..5] of String; Event : Date End; Var Var Today : Date; Memos : Array [1..100] of Reminder; Calendar : Array [1..365] of Date;
Var Record End Var Payroll : array [1..Workers] of Record FirstName, LastName : string; Residence : Record HouseNumber : real; StreetName, CityName : string; StateName : Array [1..2] char; ZipCode : integer; end; Phone : Record AreaCode, Exchenge : ; Line : ; end; PayScale : 'A'..'G'; End;
Write Write (Payroll[7].Residence.ZipCode); Payroll[23].Phone.AreaCode :=804; Ifin If Payroll[58].LastName[1] in ['T'..'Z'] Then... Соблюдение всех правил перечисления индексов и имен полей при составлении ссылок является довольно утомительным занятием, часто приводящим к ошибкам. With Чтобы облегчить выполнение многократных ссылок для описанных структур вводится оператор With (в переводе с английского - предлог "с").
Общая форма записи. With do With do With В рамках оператора, определяемого внутри оператора With, к полям определяемой переменной можно обращаться просто по имени. Например: Withdo Fortodo Withdo If then With Payroll[7].Residence do ZipCode := 2345; For i := 1 to Workers do With Payroll[i] do If PayScale < 'G' then PayScale := Succ(PayScale);
Fortodo Withdo Begin End For i := 1 to Workers do With Payroll[i].Residence do Begin Writeln(HouseNumber,' ',StreetName); Writeln(CityName,',',StateName,',',ZipCode); End; With Операторы With могут быть вложенными. Приведенные ниже три оператора эквивалентны друг другу: Payroll[i].Residence.HouseNumber := 50; Withdo With Payroll[i].Residence do HouseNumber := 50; WithdoWithdo With Payroll[i] do With Residence do HouseNumber := 50;
В массиве хранятся данные об учениках класса: школа, фамилия, класс. Вывести список учеников, которые учатся в восьмом классе.
Составить список учебной группы, включающей N человек. Для каждого учащегося указать дату рождения, год поступления в техникум, курс, группу, оценки каждого года обучения. Информацию о каждом учащемся оформить в программе в виде записи. Совокупность записей объединить в массив. Составить программу, которая обеспечивает ввод полученной информации, распечатку ее в виде таблицы, а также распечатать анкетные данные студентов, получивших одну оценку 3 за все время обучения.
Составьте список группы спортсменов, занимающихся легкой атлетикой, включающей N человек. Для каждого спортсмена укажите фамилию, имя, название общеобразовательной школы, класс, результаты по следующим дисциплинам: бег 100 м, бег 3000 м, прыжки в высоту, прыжки в длину, прыжки с шестом, метание ядра, метание копья, метание диска. Информацию о каждом спортсмене оформить в программе в виде записи. Совокупность записей объединить в массив. Составить программу, которая обеспечивает ввод полученной информации, распечатку ее в виде таблицы, а также распечатать анкетные данные спортсменов, занявших 1 место по каждой дисциплине.