Записи Комбинированный тип
Запись – структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. Поля записи могут быть различного типа. Чтобы можно было обращаться к различным полям записи, они именуются.
Комбинированный тип данных. Записи. Описание типа данных Type = record : ; … : ; Var : ;
Пример. Type Car = record Number : integer; Marka : string[20]; FIO : string[40]; Address : string[60]; end; Var M, V : Car;
Обращение к значению поля 1 способ: по составному имени Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделённых точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи Car, надо записать: M.Number, M.Marka, M.FIO, M.Address
Составные имена можно использовать в операторах ввода-вывода: Read (M.Number, M.Marka, M.FIO, M.Address); Write (M.Number:4, M.Marka:7, M.FIO:12, M.Address:25); Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип. Например, V := M;
Составное имя поля можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания: M.Number:= 1678; M.Marka := ГАЗ – 24; M.FIO := Демьяшкин В.А.; M.Adress := ул.Пушкина ;
Оператор присоединения With do ; Оператор присоединения упрощает доступ к полям записи. Например вместо M. Number:= 1678; M. FIO := Демьяшкин В.А.; M. Adress := ул.Пушкина ; можно использовать With М do begin Number:= 1678; FIO := Демьяшкин В.А.; Adress := ул.Пушкина ; end;
Обращение к значению поля 2 способ: Использование оператора присоединения: With do ; Пример. With M do begin Number := 2347; Marka := ГАЗ – 24; FIO := Петров О.Б.; Address := ул.Златоустовская, ; End; Оператор With обычно используют в тех случаях когда необходимо произвести несколько действий подряд с полями записи.
Паскаль допускает вложение записей друг в друга (т.е. Поле в записи может быть в свою очередь тоже записью). Соответственно оператор with тоже может быть вложенным: with rv1 do with rv2 do with rvn do … Уровень вложения не должен превышать 9.
В ряде задач удобно пользоваться массивами из записей. Их можно описать следующим образом: Type Car = record Number : integer; Marka : string[20]; FIO : string[40]; Address : string[60]; end; Var z : array of Car; Перемещаясь по массиву, необходимо указывать индекс элемента массива, синтаксически это выглядит так: z[i].FIO; z[i].mark
Массив типа запись Uses crt; Type Zap=record fam:string[20]; year:byte; sex:char end; Mss=array [1..5] of zap; Var A:mss; i:integer; begin clrscr; for i:=1 to 5 do begin readln(a[i].fam); readln(a[i].year); readln(a[i].sex); end; for i:=1 to 5 do begin writeln(a[i].fam,,a[i].year,,a[i].sex);end; Readln End.
Поля записи также могут быть массивами. Например, в таблице хранятся фамилии студентов и оценки по 10 предметам. Мы можем ввести массив оценок для каждого студента, а для всей таблицы массив записей. Для того, чтобы выйти на конкретного студента мы должны указать индекс массива записей, а для того, чтобы выйти на его оценку по конкретному предмету, мы должны указать индекс массива оценок. Для указания индексов должны быть разные переменные. Пример: мы работаем со второй строкой таблицы и с пятым предметом. Следует записать так: Z[2].ozenka[5]. В общем виде: z[i].ozenka [j] Индекс записи Индекс массива предметов
Примеры на обращение к элементам записи Опишите запись с именем типа Post, содержащую информацию в почтовой базе данных о подписчиках на газеты и журналы: ФИО (тип string); Адрес (тип string); 10 строк с названиями газет и журналов. Переменную, определяющую запись, назовите G. Одномерный массив записей назовите BD.
Uses Crt; TYPE Post = record Fio: string[70]; Adress: string[150]; Nazv: array[1..10] of string[40]; VAR G: Post ; BD: array[1..5] of Post ; i, j :integer; … G.Fio:=Иванов Иван Иванович; G.adress:=Москва, ул.Лесная,67 кв.124; G.Nazv[1]:=Спорт; … For i:=1 to 5 do Begin With BD [i] do Begin ReadLn(Fio); ReadLn(Adress); For j:=1 to 10 do Readln(Nazv [j]); End; End;
В записной книжке записаны фамилии и номера телефонов нескольких человек. Определить, есть ли в записной книжке человек с заданной фамилией. И если есть, то вывести его номер телефона. program zap_87_47; uses crt; type zap=record tel:string; fam:string; end; mass=array[1..4] of zap; var i:integer; a:mass; b:string; begin clrscr; writeln ('Введите номер телефона '); readln (b); writeln ( 'Введите фамилии и телефоны'); for i:=1 to 4 do readln (a[i].fam,a[i].tel ); for i:=1 to 4 do if a[i].tel = b then begin Writeln (a[i].fam );end; end.
Задачи. 3. Известны данные о стоимости каждой из 15 моделей автомобилей и об их типе (легковой, грузовой). Найти среднюю стоимость легковых автомобилей. 4. * Дана информация об учениках класса: фамилия, имя, отчество, дата рождения(год, номер месяца и число). Определить, есть ли в классе ученики, у которых сегодня день рождения, и если да, то вывести имя и фамилию каждого.
Задачи. 5. В списке сотрудников фирмы (мужчин) заданы стаж их работы и семейное положение. Определить холостого работника с наименьшим стажем работы. 6. Дана информация о сотрудниках фирмы (фамилия, зарплата, пол). Определить фамилии мужчины и женщины, имеющих наибольшую зарплату.