
- •Var «Имя переменной »:set of «базовый тип » ;
- •Построение множеств :
- •Массив множеств.
- •Операция со множествами .
- •Операция включения и исключения одиночного элемента: реализуется с помощью .
- •Достоинство и недостатки множеств:
- •1 Способ : через определение соответствие типа
- •2 Способ : в разделе описания переменных:
- •Массивы записей
- •Записи со стартовыми значениями .
- •Вложенные записи
- •Оператор присоединения.
- •Вариантные записи .
- •Глобальные и локальные переменные
- •Вызов подпрограмм .
- •Формальные и фактические параметры .
- •Параметры подпрограмм.
- •Параметры – переменные.
- •Параметры –константы.
- •Функции
- •Обособленный вызов функций
- •Вложенные подпрограммы
- •Дальний и ближний вызов подпрограмм . Дальний вызов
- •Ближний вызов.
- •Подпрограмма с не типизированными параметрами .
- •Опережающее описание подпрограмм .
- •Рекурсивные подпрограммы
- •Внешние подпрограммы.
- •Процедуры и функции как параметры подпрограмм .
- •Расположение блоков программы в памяти .
- •Сегментный и адресный типы данных .
- •Динамическое распределение памяти
- •Динамические структуры используются в следующих случаях :
- •Ссылочный тип данных . Работа с адресами.
- •Синтаксис описания переменой ссылочного типа :
- •Основные операции с ссылочными переменными
- •Операция разыменования к указателям типа pointer .
- •Присваивание разыменование ссылок
- •Операция сравнивания
- •Процедуры работы с динамической памятью
- •Выделение блока памяти.
- •Процедура освобождения памяти
- •Выделение блока памяти из кучи
- •Процедура очистки памяти
- •Процедура маркировки адреса динамической памяти.
- •Процедура освобождения памяти
- •Функции анализа свободной памяти в «куче»
- •Управление размерами динамической памяти и размером стека.
- •Предопределенные указатели Администратор дп(кучи) .
- •Особенности при выделение блоков
- •Анализ ресурсов дп при размещение динамических данных.
- •Линейные динамические списки.
- •Определение элемента однонаправленного линейного списка.
- •Организация динамических списков и операции над ними.
- •1.Организация списка типа стек.
- •2.Формирование списка типа очередь(fifo).
- •Добавление элемента
- •Просмотр списка
- •Вставка элемента
- •Удаление узла из существующего списка.
- •Удаление текущего узла списка.
- •Удаление всего списка.
- •Открытие файла на запись (перезапись).
- •Буфер ввода-вывода.
- •Запись данных в файл.
- •Чтение данных из файла(read,readln).
- •Файлы ввода/вывода. Текстовые файлы. Процедуры работы с текстовыми файлами. Запись и чтение в текстовый файл информации различного типа (числовая, строковая). Процедуры работы с текстовым файлами.
- •Запись и чтение символьной информации.
- •Запись и чтение числовой информации
- •Запись и чтение строковой информации.
- •Типизированные файлы.
- •Доступ к компонентам файла осуществляется с помощью следующих процедур:
- •Добавление записи в типизированный файл
- •Удаление записи
- •Другие функции используемые при прямом доступе
- •Не типизированные файлы и операции над ними.
- •Структура модуля .
- •Var «библиотечные переменные »
- •Раздел реализации.
- •Компиляция модулей .
- •Подключение модулей
- •Закольцованность модуля.
Операция сравнивания
Под операцией сравнения понимают сегментов и смещений , находящихся в ссылках или указателях . При этом допустимы операции сравнивания на равенство или не равенство адресов . При выполнении операции сравнения в операции участвуют 32 бита как единое целое , поэтому если две ссылки указывают на один физический адрес , но он записан по-разному , то ссылки – различные.
Дополнительные операции работы с адресами
Определения адреса переменной
Add( «переменные ») = @ - взятие адреса
P:=@i; = p:= add(i);
Определения адреса сегмента , в котором находятся значения переменной seg(‘переменая’):word; Данная функция возвращает адрес сегмента в десятичной формой .
Var
S :word;
I:byte;
S;=seg(i);
OFS(‘ переменная ’): word; возвращение адреса смещения в десятичной форме
Операция создания адреса
Ptr(‘адрес сегмента’,’ адрес смещения’);
Параметры задаются в 16ричной форме . Данная функция организует ссылку на место в памяти , определяемое заданными в качестве параметра адресами сегмента и смещения . Эта операция связывает ссылку с некоторой областью памяти . Данная операция = операция присваивания адреса.
P:=Ptr ($A1,$A2);
Var
P1,p2:^integer;
……….
P1:=Ptr ($0100,$0000);
P1^:=2;
P2:=Ptr ($0100,$0000);
Write(p2^);
Возможно осуществить ссылку на область памяти через функцию Ptr не используют переменную . Необходимо воспользоваться операцией приведения типов , так как операция раз адресация не содержат информации.
Var
B:byte;
……
B:=byte(Ptr ($0100,$0000));
Аналогичное использование функции и в случае , когда необходимо поместить значения в некоторой области памяти :
Byte (Ptr ($0100,$0000)^):=b;
Обычно функцию ptr используют для наложения некоторый структуры данных на какую-либо область памяти. Рассмотрим пример :
Необходимо наложить массив на видеобуфер , содержать образ текстового экрана и находящийся по адресу $B800:$0 . С этого адреса поочередно располагаются пары байт - информации , информации байт и байт – атрибут , который показывают какой символ и с каким атрибутом (цвет символа , фона ) отображается в том или ином месте экрана .
В текстовом режиме 10*25 знакомест строка экрана занимает 160 байт памяти. Весь экран – 400 байт = 4кб
Пример заполнения точки экрана символами ‘0’ синего цвета .
Type
Vid=record
Inf:char;
Attr:byte;
End;
Vid_arr=array [1..2000] of vid;
Var
I:word;
Ptr_v^:vid_arr;
Begin
Ptr_v:=ptr ($b800,$0);
For i:=1 to 2000 do
Begin
Ptr_v ^[i].inf:=’0’;
Ptr_v^[i].attr:=1;
End;
Определение размера переменной или типа
Size of ( «переменная» или «тип»):word;
Var
S:word;
I:string[10];
……
S:=size of (i);
Прямой доступ через предопределенный массив .
Используется 3 предопределения массива Mem (byte), Mem w (word), Mem L (Longint), которые работают с элементами различных типов . Синтаксис записи обращения к элементам массива :
Mem [‘сегмент ’:’ смещение ’] .
Пример заполнения текстового экрана ‘0’ синего цвета , использование предопределенный массив :
Var
I:word;
Begin
I:=0;
While I <> 400 do
Begin
Mem[$B800:$0 + i]:= ord(‘0’);
Mem[$B800:$1 + i]:= 1;
I:=i+2;
End;
Копирование блока памяти из одной области в другую
Move («параметр 1», «параметр 2» , «параметр 3»);
Параметр 1 определяет адрес начала копируемого блока , адреса блока , в который копируем – 2 параметра , параметр 3 – размер копируемого блока . В качестве Параметров 1 и 2 возможно использовать различные переменные , которые будут определять адреса первых байтов соответствующих им блоков .
Пример копирования из А в А1
Const
A: array[1..5] of byte = (1,2,3,4,5);
Var
A1 : aaray[1..5] of byte ;
…..
Move (A,A1, size of (A));
Данная процедура может используется для копирования переменных .
Копирование разнотипных переменных :
Var
I:byte;
J:word;
……..
I:=1;
J:=256;
Move (I,j, size of(i));
В этом случае необходимо использовать однотипные переменные или указатель правильный размер переменного блока Move (I,j, size of(i));
Связывание переменной с адресом
Стандартами языка допускается устанавливать переменной адрес , по которому будут храниться ее значения . для этого используется директива absolute «адрес » , который указывается в разделе объявления переменных .
Var
C:char absolute $B800:$0;
P:^char;
Begin
Clrscr;
C:=b;
Readkey ;
Writeln ;
P:=@c ;
Write(p^);
End.
Организация динамической памяти
лекция №9
Ссылочный и указательный типы данных. Организация динамической памяти. Процедура работы с динамической памятью. Предопределённые указатели. Анализ ресурса динамической памяти при размещении динамических данных. Перепрограммирование функции монитора кучи.