КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Тема№18 Сравнение массивов и записей. Работа с полями записей
Сравнение записей с массивами
В то время как массив – объединение компонент одинакового типа, в записи можно объединять компоненты различного типа. Сравните массив и запись:
type numb = array[1..4] of integer; date = record month: 1..12; day: 1..31; year: integer; week: (mo, tu, we, th, fr, sa, su) end;
Переменные, определенных выше типов, содержат либо целые массивы, либо целые записи:
var m, n: numb; one, two: date;
Присваивание значений элементам массивов и записей также имеет некоторое сходство:
m[1]:= 498; n[3]:= 637; one.day:= 25; one.week:= fr; two.year:= 2011;
Следует отметить, что записи сами могут быть элементами массива. Пример массива записей:
var daysopen: array[1..10] of date; Оператор With
Этот оператор используется для удобства работы с переменными типа record (запись).
Общий вид:
with a do st; здесь a – имя переменной типа record, st – оператор.
В операторе st при ссылках на компоненты записи имя a можно опускать.
Пример. Для занесения даты рождения достаточно выполнить операторы:
with birthday[mother] do begin month:= 5; day:= 1; year:= 1965 end; Запись с вариантами
Общий вид:
type v = record a: type1 b: type2 …… case n: typen of c1:(t11: type11; t12: type12; …); c2:(t21: type21; t22: type22; …); …….. end; var z: v; Здесь z – переменная типа v; n – переменная, называемая переключателем; typen – тип переменной n.
Этому же типу должны принадлежать метки c1 и c2. Каждой метке соответствует набор полей t11, …. Эти поля являются компонентами варианта.
Если какой-либо метке c вообще не соответствуют поля, то пишут c…: ();
Замечания:
Любая запись (record) может иметь только одну вариантную часть (case). Вариантная часть должна помещаться после постоянной части. Среди идентификаторов полей не должно быть одинаковых. Обращение к компоненте z.tij записи z происходит так:
Присваивается соответствующее значение c… переключателю n. В зависимости от значения n переменная z, помимо полей a, b, …, содержит те поля, которые соответствуют той метке c…, с какой совпадает значение n. Выполняется операция с компонентой z.tij. Пример. Пусть необходимо собрать следующие сведения о сотрудниках института: фамилию, дату рождения и, если есть семья, то фамилию и дату рождения супруги (супруга).
Эта информация может быть описана, например, записью person.
Пусть переменная типа kind может иметь одно из значений («женат», «холост»).
kind = (married, single); person = record name: string; datebirth: date; case yesno: kind of married: (name1: string; date1: date); single: () end; Здесь name – строка символов; datebirth – запись, содержащая дату рождения; yesno – переключатель типа kind, который может принимать одно из двух значений: married либо single; name1 – строка символов, содержащая фамилию супруга(и); date1 – запись, содержащая дату рождения; single – пустое поле.
Если персона в браке, то будет присутствовать поле married, если нет – поле single. Паскаль допускает вложение вариантов в типе record.
Замечание. Перед засылкой информации в запись программист должен присвоить переключателю соответствующее значение. В противном случае информация в поле заслана не будет, и система никакой диагностики не выдаст.
Пример. type kind = (married, single); date = record day: 1..31; month: 1..12; year: integer; end; person = record name: string; datebirth: date; case yesno: kind of married: (name1: string; date1: date); single: () end;
var p: person;
begin with p do begin yesno:= married; name:= 'panin'; with datebirth do begin day:= 14; month:= 5; year:= 1962 end; case yesno of married: begin name1:= 'panina'; with date1 do begin day:= 30; month:= 12; year:= 1968 end; end; end; end;
with p do write(' ', name); with p.datebirth do writeln(' ', day, '/', month, '/', year); with p do write(' ', name1); with p.date1 do write(' ', day, '/', month, '/', year);
readln end.
Дата добавления: 2015-04-24; Просмотров: 855; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |