Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
28_-_2_.doc
Скачиваний:
7
Добавлен:
25.09.2019
Размер:
2.83 Mб
Скачать

1. Ссылочные типы данных.

Ссылка в статической памяти, данные в динамической.

-Раздел кода

-Статическая секция

Свободная память – динамическая память.

Память выделяет диспетчер памяти.

переменная ссылочного типа занимает 4 байта – это под адрес в оперативной памяти.

За каждой переменной закреплён базовый тип. Там может быть скалярный или любой другой тип за исключением файлового.

Ссылочный тип ->

type C=^integer;

var A:C;

A – ссылка или указатель. она будет иметь значение, где будет иметь значение адреса памяти, где будет объект целого типа.

2. Оператор new.

new(A); {A – переменная ссылочного типа. }

При выполнении процедуры new подаётся запрос диспетчеру памяти. После адрес свободной памяти присваивается переменной.

A – адрес

A^:= 5; A – 4 байта статической памяти и 2 байта динамической.

A1: integer;

A1:=7; A1 – 2 байта статической.

Пример:

type

D = record

fio:string[45]; \ - 107 байт (105 байт символы + 2 модификатора)

adr:string[60]; /

end;

C1=^D;

var

A2:C1;

begin

new(A2);

dispose(A); - освобождение памяти.

Для случая, когда базовый тип – запись с вариантами, процедуры new и dispose выглядят так:

new(A, M1, M2, M3, ... ,MN);

dispose(A, M1, M2, M3, ... ,MN);

Где A – это указатель на запись с вариантами, а M1, M2, M3, ... ,MN – перечисление всех полей записи.

В данн ом случае выделяется маскимально возможное количество байт, которые может занять запись с учётом всех вариантов, а не память под все поля.

При записи:

new(A);

A^:=5;

new(A);

A^:=6;

В памяти будут храниться оба числа, но адрес, где хранится число 5 будет потерян и очищение этой памяти будет только после завершения работы программы.

3. Сортировка данных в динамической памяти.

При сортировке данных в динамической памяти, меняются только значения указателей на следующие/предыдущие поля. Т.е. если цепочка 1—3 — 2, то указатель у 1.след меняется на 2, указатель у 2.след меняется на 3, а указатель 3.след обнуляется.

4. Файлы с прямым доступом.

Массив данных – в памяти.

Набор данных – на диске.

Файл – понятие логическое, которое используется для представления набора данных в программе.

var F:File of real;

read(F,A); - прочитать компонент из файла и записать в переменную. Тип одинаковый!

assign(ифп, спец); - привязать имя файла к файловой переменной.

ифп – переменная

спец – путь к файлу C:\A\B\...\a.txt

reset(F); - открыть файл для чтения и добавления компонентов в конец файла. ????

rewrite(F); - открыть файл для перезаписи (содержимое удаляется).

seek(ифп, №); - переходит к определённомукомпоненту в файле.

№ - номер блока, начинается с нуля. Т.е. seek(F,3) – Переход к 4 компоненту.

truncate(ифп); - для отсечения хвостовой части файла начиная от текущего положение указателя включая текущий компонент.

filesize(ифп); - количество компонентов.

filepos(ифп); - текущее значение указателя.

Первое поле в компоненте – ноль.

1) отсортировано

2) без пропусков номера (ключевое поле без пропусков).

Способы формирования:

1) Добавлять попорядку

2) Добавить все компоненты пустыми и обрабатывать.