
- •Var «Имя переменной »:set of «базовый тип » ;
- •Построение множеств :
- •Массив множеств.
- •Операция со множествами .
- •Операция включения и исключения одиночного элемента: реализуется с помощью .
- •Достоинство и недостатки множеств:
- •1 Способ : через определение соответствие типа
- •2 Способ : в разделе описания переменных:
- •Массивы записей
- •Записи со стартовыми значениями .
- •Вложенные записи
- •Оператор присоединения.
- •Вариантные записи .
- •Глобальные и локальные переменные
- •Вызов подпрограмм .
- •Формальные и фактические параметры .
- •Параметры подпрограмм.
- •Параметры – переменные.
- •Параметры –константы.
- •Функции
- •Обособленный вызов функций
- •Вложенные подпрограммы
- •Дальний и ближний вызов подпрограмм . Дальний вызов
- •Ближний вызов.
- •Подпрограмма с не типизированными параметрами .
- •Опережающее описание подпрограмм .
- •Рекурсивные подпрограммы
- •Внешние подпрограммы.
- •Процедуры и функции как параметры подпрограмм .
- •Расположение блоков программы в памяти .
- •Сегментный и адресный типы данных .
- •Динамическое распределение памяти
- •Динамические структуры используются в следующих случаях :
- •Ссылочный тип данных . Работа с адресами.
- •Синтаксис описания переменой ссылочного типа :
- •Основные операции с ссылочными переменными
- •Операция разыменования к указателям типа pointer .
- •Присваивание разыменование ссылок
- •Операция сравнивания
- •Процедуры работы с динамической памятью
- •Выделение блока памяти.
- •Процедура освобождения памяти
- •Выделение блока памяти из кучи
- •Процедура очистки памяти
- •Процедура маркировки адреса динамической памяти.
- •Процедура освобождения памяти
- •Функции анализа свободной памяти в «куче»
- •Управление размерами динамической памяти и размером стека.
- •Предопределенные указатели Администратор дп(кучи) .
- •Особенности при выделение блоков
- •Анализ ресурсов дп при размещение динамических данных.
- •Линейные динамические списки.
- •Определение элемента однонаправленного линейного списка.
- •Организация динамических списков и операции над ними.
- •1.Организация списка типа стек.
- •2.Формирование списка типа очередь(fifo).
- •Добавление элемента
- •Просмотр списка
- •Вставка элемента
- •Удаление узла из существующего списка.
- •Удаление текущего узла списка.
- •Удаление всего списка.
- •Открытие файла на запись (перезапись).
- •Буфер ввода-вывода.
- •Запись данных в файл.
- •Чтение данных из файла(read,readln).
- •Файлы ввода/вывода. Текстовые файлы. Процедуры работы с текстовыми файлами. Запись и чтение в текстовый файл информации различного типа (числовая, строковая). Процедуры работы с текстовым файлами.
- •Запись и чтение символьной информации.
- •Запись и чтение числовой информации
- •Запись и чтение строковой информации.
- •Типизированные файлы.
- •Доступ к компонентам файла осуществляется с помощью следующих процедур:
- •Добавление записи в типизированный файл
- •Удаление записи
- •Другие функции используемые при прямом доступе
- •Не типизированные файлы и операции над ними.
- •Структура модуля .
- •Var «библиотечные переменные »
- •Раздел реализации.
- •Компиляция модулей .
- •Подключение модулей
- •Закольцованность модуля.
Выделение блока памяти из кучи
Для этого используется еще одна процедура GetMem(<параметр1>,<параметр2>);
Параметр1 –это ссылка или указатель
Параметр2-значение типа word определяющее размер выделяемого блока.
Адрес выделяемого блока будет храниться в параметре1.
Данная процедура в основном используется для работы с указателями
Пример: выделение памяти с помощью процедуры GetMem.
Var
P
:pointer;
.
.
Getmem(p,sizeof(real));
Getmem(p,1024);
Реально выделенный объем будет другим.
Пример работы с блоками памяти.
Var
P:^byte;
.
.
Getmem(p,4);
P1^:=300; больше чем байт!
P^:=3; - это сработает;
Процедура очистки памяти
Freemem(<параметр1>,<параметр2>)
Парметр1-ссылочная переменная или указатель.
Парметр2 –размер.
Данная процедура используется для освобождения непрерывных участков памяти. Участок памяти с адресом определённым 1 параметром и размером определенным 2 параметром после выполнения данной процедуры считается свободным. Данная процедура считается пареной процедуре Getmem и используется в основном с указателями типа Pointer.
Пример: помещение в блок динамической памяти и извлечение части графического экрана.
Uses crt;
Var
P:pointer;
Size:word;
Bedin
.
.
Size:=imagesize(x,y,x1,y1);
Getmem(p,size);
Getimage(x,y,x1,y1,p^);
Putimage(x,y,p^,1);
.
.
Freemem(p,size);
End;
Процедура маркировки адреса динамической памяти.
Mark(<ссылка или указатель >);
После выполнения данной процедуры в ссылку или указатель записывается записывается адрес нижней границы свободной области памяти(значение указателя HeapPtr)
Пример 1: использование маркировки для очистки памяти.
Var
P1,p2,p3,p:^integer;
.
.
New(p1) ;
Mark(p);
New(p2);
New(p3);
Release(p);
(этот пример рассмотрен ниже).
П
ример
2:
Var
Po,p1,p2,p3:^byte;
Pp:pointer;
.{1}
.
New(p0);
New(p1); {2}
New(p2);
Dispose(p1);
Mark(pp);{3}
Если далее выполнить new(p3) то выделиться блок памяти в области связанной с p1, если же p3:^integer то оператор new(p3) привел бы к тому что блок выделиться с адреса HeapPtr.
Процедура освобождения памяти
Release(<ссылка или указатель>);
Продолжим пример1.
Данная процедура Release переместит указатель HeapPtr по адресу P т.е. все находящиеся выше адреса Р будет считаться свободным.
Функции анализа свободной памяти в «куче»
MaxAvail- возвращает в байтах длину самого большого блока памяти. Возвращаемое значение имеет тип Longint. Данное значение необходимо учитывать для размещении в динамической памяти сплошной структуры такой как массив, записи.
MemAvail- возвращает количество всей свободной памяти в «куче» в байтах т.е. сумму длин всех свободных блоков, данная функция может использоваться при анализе ресурсов динамической памяти перед размещением в ней динамических переменных.
Управление размерами динамической памяти и размером стека.
Используется глобальная директива компилятора.
{$M<размер стека>,<минимальный размер Дп>,<максимальный размер Дп>}
Размер стека изменяется в пределах от 1024-65520 байт; по умолчанию устанавливается 16 килобайт. ДП изменяется от 0 до 655360(по умолчанию).
Так как значение Дп можно указать больше чем реально допустимый объем памяти, в этом случае под динамическую память будет отведен весь доступный объем памяти .
Программа не будет выполняться если свободной памяти будет меньше чем задано минимальным значением размера. Размер стека и памяти можно установить и в интегрированной среде, а можно в программе пример {$M 1024,0,65535}