Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 807; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.