
- •Var «Имя переменной »:set of «базовый тип » ;
- •Построение множеств :
- •Массив множеств.
- •Операция со множествами .
- •Операция включения и исключения одиночного элемента: реализуется с помощью .
- •Достоинство и недостатки множеств:
- •1 Способ : через определение соответствие типа
- •2 Способ : в разделе описания переменных:
- •Массивы записей
- •Записи со стартовыми значениями .
- •Вложенные записи
- •Оператор присоединения.
- •Вариантные записи .
- •Глобальные и локальные переменные
- •Вызов подпрограмм .
- •Формальные и фактические параметры .
- •Параметры подпрограмм.
- •Параметры – переменные.
- •Параметры –константы.
- •Функции
- •Обособленный вызов функций
- •Вложенные подпрограммы
- •Дальний и ближний вызов подпрограмм . Дальний вызов
- •Ближний вызов.
- •Подпрограмма с не типизированными параметрами .
- •Опережающее описание подпрограмм .
- •Рекурсивные подпрограммы
- •Внешние подпрограммы.
- •Процедуры и функции как параметры подпрограмм .
- •Расположение блоков программы в памяти .
- •Сегментный и адресный типы данных .
- •Динамическое распределение памяти
- •Динамические структуры используются в следующих случаях :
- •Ссылочный тип данных . Работа с адресами.
- •Синтаксис описания переменой ссылочного типа :
- •Основные операции с ссылочными переменными
- •Операция разыменования к указателям типа pointer .
- •Присваивание разыменование ссылок
- •Операция сравнивания
- •Процедуры работы с динамической памятью
- •Выделение блока памяти.
- •Процедура освобождения памяти
- •Выделение блока памяти из кучи
- •Процедура очистки памяти
- •Процедура маркировки адреса динамической памяти.
- •Процедура освобождения памяти
- •Функции анализа свободной памяти в «куче»
- •Управление размерами динамической памяти и размером стека.
- •Предопределенные указатели Администратор дп(кучи) .
- •Особенности при выделение блоков
- •Анализ ресурсов дп при размещение динамических данных.
- •Линейные динамические списки.
- •Определение элемента однонаправленного линейного списка.
- •Организация динамических списков и операции над ними.
- •1.Организация списка типа стек.
- •2.Формирование списка типа очередь(fifo).
- •Добавление элемента
- •Просмотр списка
- •Вставка элемента
- •Удаление узла из существующего списка.
- •Удаление текущего узла списка.
- •Удаление всего списка.
- •Открытие файла на запись (перезапись).
- •Буфер ввода-вывода.
- •Запись данных в файл.
- •Чтение данных из файла(read,readln).
- •Файлы ввода/вывода. Текстовые файлы. Процедуры работы с текстовыми файлами. Запись и чтение в текстовый файл информации различного типа (числовая, строковая). Процедуры работы с текстовым файлами.
- •Запись и чтение символьной информации.
- •Запись и чтение числовой информации
- •Запись и чтение строковой информации.
- •Типизированные файлы.
- •Доступ к компонентам файла осуществляется с помощью следующих процедур:
- •Добавление записи в типизированный файл
- •Удаление записи
- •Другие функции используемые при прямом доступе
- •Не типизированные файлы и операции над ними.
- •Структура модуля .
- •Var «библиотечные переменные »
- •Раздел реализации.
- •Компиляция модулей .
- •Подключение модулей
- •Закольцованность модуля.
Основные операции с ссылочными переменными
Будем рассматривать операции как примеры обращения по ссылке к статическим данным :
Взятие адреса или операция адресация: для того, чтобы связать ссылочную переменную со значением некоторого элемента памяти необходимо этой переменной присвоить адрес. Для взятие адреса используются операция : @ , которая ставится перед переменной , адрес который необходимо получить . Унарная операция .
Пример :
Var
I:integer;
P:^integer;
Begin
……
I:=7;
P:=@i;
В этом случае переменная p будет ссылаться по адресу на область памяти , связанную с переменной i. Для того , чтобы ссылка и указатель ни на что не указывали или присваивается пустое значение ,которое обозначается служебном словом Nil : p:Nil . Перед использованием ссылочных переменных и указателей необходимо следить за тем , чтобы они были проинициализированы доступными и логически верными значениями адресов . Неправильная инициализация может привести к непредсказуемым результатам .
Разыменование или раз адресация : является основной операцией работы с указателями , суть заключается в том , чтобы взять или поместить некоторое значение по адресу Ю находящихся в ссылочной переменной : ^ , который ставиться после ссылочной переменной Пример :
Var
I:integer;
P:^integer;
Begin
……
I:=7;
P:=@i;
P^:=2;
Wrieln(p^);
Writeln(i);
При выполнение операции разыменования важную роль играет базовый тип , он указывает какой объем памяти буде обрабатываться и с каким типом будет работать .
Операция разыменования к указателям типа pointer .
Пример :
Var
I:integer;
P:pointer;
Begin
……
I:=7;
P:=@i;
P^:=2;
Writeln(p^); (x)
Данные операции могут быть выполнены , так как указатель типа pointer не обладает информацией о том , с каким объемом памяти надо работать . Поэтому при использовании типа pointer для обращения к данным необходимо произвести приведение типов , который укажет какой объем данных необходимо обрабатывать
Integer (p^):=2 ;
Writeln(integer(p^));
При работе с ссылками необходимо ввести четкий контроль за сохранением соответствия базовым типом ссылочной переменной и базовым типом переменной , на данные которые эта ссылка ссылается . Несоответствие типов может привести к нежелательным результатам :
a)
var
I,j,k:byte;
P1,p2:^byte;
Begin
I:=1;j:=2;k:=3;
P1:=@i; p2:=@j;
Writeln (p1^); 1
Writeln(p2^); 2
var
I,j,k:byte;
P1,p2:^integer;
Begin
I:=1;j:=2;k:=3;
P1:=@i; p2:=@j;
Writeln (p1^); 513
Writeln(p2^); 770
Присваивание ссылочной переменных и указателей .
При выполнение данной операции необходимо чтобы ссылки были совместны по типу . Операция прямого присваивания приводят к копированию адреса из одной ссылочной переменной в другую
Var
I,j:byte;
P1,p2:^byte;
……
P1:=@i;
P2:=@j;
P1:=p2;
Присваивание разыменование ссылок
При этом учитывается совместимость по типу данных , на которые они ссылаются аналогично учету совместимости при обычном присваивании
Присваивание ссылок и указателей типа pointer
Операции прямого присваивания является допустимой , так как ссылочная переменные и указатели совместны по адресу :
Var
P1:^integer ;
P2:pointer;
…
P1:=p2;
Однако они не является совместимыми по данным (у указателя pointer не определен объем памяти , с которым он будет работать при разыменование в отличие от ссылки ). Поэтому операции p1^:=p2; не выполняется . Для выполнения ее необходимо привести раз именованный указатель к базовому типу ссылки , то есть p1^:=integer(p2^);