Структурные типы данных

Содержание

Слайд 2

Пользовательские типы данных

В Object Pascal имеется возможность создавать собственные типы данных на

Пользовательские типы данных В Object Pascal имеется возможность создавать собственные типы данных
основе уже имеющихся, совмещая их, или комбинируя. Например, для создания упорядоченного списка однотипных данных используют массивы (arrays), а для объединения нескольких типов в один - записи (records).
Другим аспектом применения собственных типов данных, упрощающих процесс программирования и делающий его более понятным человеку, является использование множеств - именованного набора из нескольких возможных значений.
Создание того или иного типа данных всегда начинается с декларации, или описания нового типа данных. Делается это в заголовочной части программы или модуля и начинается с ключевого слова type. После того, как новый тип данных определен, можно создавать переменные нового типа - точно так же, как и любого простого.

Слайд 3

МНОЖЕСТВА
Ограниченный неупорядоченный набор различных элементов одинакового типа, логически связанных друг с другом.

МНОЖЕСТВА Ограниченный неупорядоченный набор различных элементов одинакового типа, логически связанных друг с
Количество элементов, входящих в множество, может меняться в пределах от 0 до 255.
Для определения множества используется ключевое слово set:
Set of <тип элементов>
диапазон из строчных латинских символов можно определить следующим образом:
type Letters = set of Сhar;
var a: Letters;
...
a := [a..z];

Слайд 4

Множества

Пример: есть подмножество символов от a до z:
type SmLetter = a..z;
Переменные типа

Множества Пример: есть подмножество символов от a до z: type SmLetter =
SmLetter не смогут принимать значения, выходящие за пределы указанного диапазона:
var a: SmLetter;
...
a := b; // здесь все правильно, т.к. малая b входит в подмножество a..z
a := B; // ошибка! Прописная B не входит в подмножество a..z

Слайд 5

Перечисление — это упорядоченный список идентификаторов. Они определяются следующим образом:
<Имя типа> = (<название значения1>, ... < название значенияN>);
Пример: Радуга
type TRainbow=(Red, Orange, Yellow,

Перечисление — это упорядоченный список идентификаторов. Они определяются следующим образом: = (
Green, Azure, Blue, Violet);

Перечисление

Слайд 6

Указатели

Указатели (pointers) - это такой тип переменных, которые хранят адрес в памяти

Указатели Указатели (pointers) - это такой тип переменных, которые хранят адрес в
компьютера, по которому расположена другая переменная. Фактически, указатель не содержит значение, а ссылается на него.
Указатели можно задать двумя принципиально разными способами.
Во-первых, можно использовать специальный тип - Pointer. При этом будет создан нетипизированный указатель, под который всякий раз надо будет принудительно выделять память, используя функцию GetMem.
Другой, как правило более предпочтительный способ, состоит в том, что сразу же создается указатель нужного типа. Делается это при помощи символа "^", предшествующего названию типа:
var P: ^integer;

Слайд 7

После того, как указатель создан, можно связать его с переменной подходящего типа,

После того, как указатель создан, можно связать его с переменной подходящего типа,
используя операцию @:
var P: ^integer;
x: integer;
...
P := @x;
Теперь к переменной x можно обращаться как непосредственно, так и через ее указатель. В случае обращения через указатель так же используют символ "^":
x := 10;
P^ := 10;

Слайд 8

Другим вариантом использования указателя, помимо связывания с существующей переменной, является выделение для

Другим вариантом использования указателя, помимо связывания с существующей переменной, является выделение для
него памяти и дальнейшая работа как с ссылкой на некую абстрактную переменную (фактически, непосредственно на область в памяти, выделенную для хранения данных). В таком случае, код будет выглядеть так:
var P: ^integer;
...
New(P); // выделение памяти, необходимой для хранения данных типа Integer
P^ := 10; // занесение данных в выделенный блок памяти
Dispose(P); // освобождение памяти

Слайд 9

Запись – это структурированный тип данных, состоящий из фиксированного числа компонентов одного или

Запись – это структурированный тип данных, состоящий из фиксированного числа компонентов одного
нескольких типов. Формат записи:
type
<имя типа> = record
<идентификатор поля>:<тип компонента>;
<идентификатор поля>:<тип компонента>
end;
  var
<идентификатор, ...> : <имя типа>;

Запись

Слайд 10

Пример записи:
type Саr = record
Number : integer; {Номер}
Marka : string[20]; {Марка автомобиля}
FIO

Пример записи: type Саr = record Number : integer; {Номер} Marka :
: string[40]; {Фамилия, инициалы владельца}
Address : string[60] {Адрес владельца}
end;
var М, V : Саr;
Например, чтобы получить доступ к полям записи Саr, надо записать:
М.Number
M.Marka
M.FIO
M.Address

Слайд 11

Пример:
М.Number := 1678;
М.Marka := ТАЗ - 24';
M.FIO := 'Демьяшкин В.А.1';
M.Address := 'ул.

Пример: М.Number := 1678; М.Marka := ТАЗ - 24'; M.FIO := 'Демьяшкин
Пушкина 12 - ЗГ';
Составные имена можно использовать, в частности, в операторах ввода-вывода:
Read(M.Number, M.Marka, M.FIO, M.Address);
Write(M.Number:4, M.Marka:7, M.FI0:12, M.Address:25);
Допускается применение оператора присваивания и к записям в целом, если они имеют одинаковый тип. Например,
V := М;

Слайд 12

ПРИМЕР
Храним информацию о людях, заполнивших анкету на поступление на работу.
Нас интересуют:

ПРИМЕР Храним информацию о людях, заполнивших анкету на поступление на работу. Нас
ФИО человека, возраст, образование (среднее/высшее), владение компьютером, владение иностранными языками.
type
TPerson = record
Name: String;
Age: Byte;
Education,PC: Boolean;
Foreign: set of TForeignLanguages;
end;
type
TForeignLanguages = (flEnglish, flGerman, flFrench);

Для ФИО вполне подходит текстовая строка типа String. 255 символов.
Для хранения возраста целесообразно выбрать тип данных Byte (число от 0 до 255).
Для поля "образование" выбран логический тип данных. Условимся, что True - это высшее образование, False - высшего нет (т.е. среднее). 
PC - владение компьютером, здесь всё понятно.
Для хранения иностранных языков здесь используется множество.

Слайд 13

Специальные типы данных

TDateTime - этот тип является, фактически, вещественным числом, данные хранятся

Специальные типы данных TDateTime - этот тип является, фактически, вещественным числом, данные
в нем следующим образом: целая часть числа определяет дату, за которую берется количество дней, прошедших с 31 декабря 1899 года, а дробная определяет время в миллисекундах, прошедших с начала текущего дня.
Преимуществом же типа TDateTime является то, что для него предусмотрен целый набор готовых функций, позволяющих работать с датами и временем. 
Имя файла: Структурные-типы-данных.pptx
Количество просмотров: 37
Количество скачиваний: 0