Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Множества. Динамические массивы




Записи

Динамические массивы

При объявлении динамических массивов не указываются размер­ность и число элементов (<имя массива> Array Of <тип>), и место в памяти под массив не отводится. Динамическое размещение массива в памяти производится процедурой SetLength (<имя массива>,n1 [,n2]...), где

n1, n2,... - число (константа или переменная) элементов в 1, 2,... размерности массива.

При первом размещении динамического массива всем элементам присваиваются нулевые значения.

Индексы динамического массива ‑ всегда целые числа, начинающие­ся с нуля. Повторное применение этой функции к уже существующему массиву изменяет его размер. Если размер увеличен, то все значения элементов сохраняются, а в конце добавляются новые нулевые элементы. Если размер уменьшается, то отсекаются последние элементы, а остаются значения первых элементов.

Пример:

Var A: Array Of Integer; N,i: Integer; //объявление динамического массива A

Begin

N:=3; SetLength(A,N); // массив A(0,0,0)

For i:=0 to N‑1 Do A[i]:=i+1; // массив A(1,2,3)

N:=5; SetLength(A,N); // массив A(1,2,3,0,0)

N:=2; SetLength(A,N); // массив A(1,2)

N:=3; SetLength(A,N); // массив A(1,2,0)

End

Для удаления динамического массива, например, массива A, имеются три варианта: A:=Nil; Finalize(A); SetLength(A,0).

Если A=Nil, то массив A не размещен в памяти.

К размещенным в памяти динамическим массивам можно применять функции обработки статических массивов.

Если при обращении к динамическому массиву указать только имя массива без индексов, то это означает задание указателя на первый эле­мент массива. Если динамические массивы (A, B) одного типа (например, Var A,B: Array Of Integer) и размер массива A не меньше размера массива B или массив A не размещен, то запись вида B:=A означает, что переменная B указывает на массив A (В есть псевдоним имени A), и содержимое массива В теряется при этом.

Запись ‑ группа компонентов (полей), не обязательно одного типа. Описание этого типа имеет вид:

<имя типа>=[Packed] Record<список описаний полей> End;

Packed - поля располагаются плотно без пропусков, что уменьшает размер используемой памяти, но увеличивает время обработки.

Переменную данного типа можно определить сразу в разделе переменных без предварительного описания типа в виде:

<имя переменной типа записи> = [Packed] Record <описание полей> End

Полям присваиваются пустые исходные значения: 0 ‑ числовым; пробелы ‑ строковым.

Значение константы типа записи задается списком из пос­ледо­ватель­ности вида: имя поля, двоеточие и константа.

Пример типизированной константы типа записи:

Type Date= Record D:1..31; M:1..12; Y:1900..1999; End;

Const Someday: Date=(D:16; M:3; Y:1999)

Допускается вложенность записей любого уровня. При обращении к полю указывают имя записи, символ «точка» и имя поля. Для вложенных полей уточнение продолжается.

Пример вложенных записей:

Type

Adress=record //запись с адресом

Gorod string[30];Ulica:string[30];Dom String[30];Kvartira:string[10] end;

Persona=record //запись с личными данными о человеке

Fam:string[40]; datarogdenij:TdataTime; AdressDom,AdressRab:Adress end;

Var Director, Sotrudnik: Persona; //объявление записей типа Persona

...

Director.AdressDom.Gorod:=’Арамиль’;...

Записи могут быть элементами массивов (массив записей).

Пример массива записей.Дополним предыдущий пример объявле­нием массива записей о сотрудниках фирмы.

Msotr: array [1..100] of Persona; //массив из 100 записей типа Persona

...

Msotr[2].AdressDom.Gorod:=’Екатеринбург’;//дом. адрес 2‑го сотрудника...

Для упрощения доступа к полям используется оператор присоеди­нения вида (п.1.4.9).

Пример записи с массивом:

Type M=Array [1..5) Of Integer; Rec=Record A: M; S:String; End; …

Var P: Rec; … P.A[2]:=1; //пример обращения к переменной P.

Допускаются записи с вариантами вида:

<тип записи>=Record

<описание полей постоянной части>

Сase [<имя поля с константой выбора>:] <имя типа> Of

<константа выбора ‑1>: (<поле‑1>;...<поле‑i>);

...

< константа выбора ‑ n>: (<поле‑1>;...<поле‑j>);

End;

 

Пример типазаписи о товаре с вариантами представления цены:

Zap = Record

Articul: Integer; //код товара

Name: String[40]; //наименование товара

Case TypeCena: Boolean Of //тип значения цены

True: (CenaI: Integer); //цена - целое число

False: (CenaR: Real); //цена ‑ вещественное число

End;

Var PZap: Zap; {объявление переменной ‑ записи PZap типа Zap}

Всем вариантам выделяется одна и та же область памяти. Это можно использовать для преобразования типов, например:

Var Numer: Record //запись из одной вариантной части с тремя полями

Case Byte Of //признак начала вариантной части

0: (Bn: array [0..3] of Byte); //массив из четырех символов

1: (Wn: array [0..1] of Word); //массив из двух целых типа Word

2: (Ln: LongInt); //целое число типа LongInt

End; //окончание записи

Множество‑ это набор однотипных, логически связанных объ­ек­тов: <имя типа> = set of <базовый тип элемента множества>

Переменную типа «множество» можно определить сразу в разделе пере­мен­­ных без предварительного описания типа в виде:

<имя переменной ‑ множества>: set of <базовый тип элемента>

Правила:

1. В качестве базового типа элемента множества может исполь­зо­вать­ся любой порядковый тип, кроме Word, Integer, LongInt. Обычно он задается диапазоном или перечислением.

2. Количество элементов множества ограничено 256. Номер значения базы от 0 до 255.

3. В выражении значение элементов задается конструктором мно­жества ([ ] ‑ пустое множество).

Пример:

type prostoi, nomer = set of 3..99;

var pr: prostoi; n: nomer; p: set of 'a'..'z'; begin pr:=[3,5,7,11,13];...

Пример множества заданного перечислением:

type dni=(vosk,pon,vtor,sreda,chetv,pjtn,sub);

var dnirab,weekend: set of dni;...

begin weekend:=[sub,vosk]; dnirab:=[pon..pjtn]

Пример объявления глобальной переменной типа множества:

Implementation //исполнимый раздел модуля

Var NumChar: set of Char=['0'..'9', '+', '‑', ’.’]; //допустимые символы числа

Константы типа «множество» задаются в виде ([...]).

Пример. Type Days= set of 1..31; //объявление типа множества

Const Workdays: Days=[1..5, 8..12, 15..19, 22..26, 29, 30];




Поделиться с друзьями:


Дата добавления: 2014-12-08; Просмотров: 433; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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