
- •Var «Имя переменной »:set of «базовый тип » ;
- •Построение множеств :
- •Массив множеств.
- •Операция со множествами .
- •Операция включения и исключения одиночного элемента: реализуется с помощью .
- •Достоинство и недостатки множеств:
- •1 Способ : через определение соответствие типа
- •2 Способ : в разделе описания переменных:
- •Массивы записей
- •Записи со стартовыми значениями .
- •Вложенные записи
- •Оператор присоединения.
- •Вариантные записи .
- •Глобальные и локальные переменные
- •Вызов подпрограмм .
- •Формальные и фактические параметры .
- •Параметры подпрограмм.
- •Параметры – переменные.
- •Параметры –константы.
- •Функции
- •Обособленный вызов функций
- •Вложенные подпрограммы
- •Дальний и ближний вызов подпрограмм . Дальний вызов
- •Ближний вызов.
- •Подпрограмма с не типизированными параметрами .
- •Опережающее описание подпрограмм .
- •Рекурсивные подпрограммы
- •Внешние подпрограммы.
- •Процедуры и функции как параметры подпрограмм .
- •Расположение блоков программы в памяти .
- •Сегментный и адресный типы данных .
- •Динамическое распределение памяти
- •Динамические структуры используются в следующих случаях :
- •Ссылочный тип данных . Работа с адресами.
- •Синтаксис описания переменой ссылочного типа :
- •Основные операции с ссылочными переменными
- •Операция разыменования к указателям типа pointer .
- •Присваивание разыменование ссылок
- •Операция сравнивания
- •Процедуры работы с динамической памятью
- •Выделение блока памяти.
- •Процедура освобождения памяти
- •Выделение блока памяти из кучи
- •Процедура очистки памяти
- •Процедура маркировки адреса динамической памяти.
- •Процедура освобождения памяти
- •Функции анализа свободной памяти в «куче»
- •Управление размерами динамической памяти и размером стека.
- •Предопределенные указатели Администратор дп(кучи) .
- •Особенности при выделение блоков
- •Анализ ресурсов дп при размещение динамических данных.
- •Линейные динамические списки.
- •Определение элемента однонаправленного линейного списка.
- •Организация динамических списков и операции над ними.
- •1.Организация списка типа стек.
- •2.Формирование списка типа очередь(fifo).
- •Добавление элемента
- •Просмотр списка
- •Вставка элемента
- •Удаление узла из существующего списка.
- •Удаление текущего узла списка.
- •Удаление всего списка.
- •Открытие файла на запись (перезапись).
- •Буфер ввода-вывода.
- •Запись данных в файл.
- •Чтение данных из файла(read,readln).
- •Файлы ввода/вывода. Текстовые файлы. Процедуры работы с текстовыми файлами. Запись и чтение в текстовый файл информации различного типа (числовая, строковая). Процедуры работы с текстовым файлами.
- •Запись и чтение символьной информации.
- •Запись и чтение числовой информации
- •Запись и чтение строковой информации.
- •Типизированные файлы.
- •Доступ к компонентам файла осуществляется с помощью следующих процедур:
- •Добавление записи в типизированный файл
- •Удаление записи
- •Другие функции используемые при прямом доступе
- •Не типизированные файлы и операции над ними.
- •Структура модуля .
- •Var «библиотечные переменные »
- •Раздел реализации.
- •Компиляция модулей .
- •Подключение модулей
- •Закольцованность модуля.
Добавление элемента
Для списка fifo.
Создается новый элемент и он стыкуется с последним элементом списка, например делается проход по всему списку и определяется адрес последнего элемента, пусть адрес последнего элемента находиться в указателе С.
Создается новый элемент адресная часть которого в указателе F. Формируется его информационная часть, адресная часть равная nil и устанавливается связь предпоследнего элемента с созданным.
Пример текста добавления узла.
New(e);
E^.i nfo:=10;
E^.Next:=NIL;
C^.NEXT:=E;
Для списка Lifo.
Создается новый элемент адрес которого в указателе Е. формируется информационная часть. Этот элемент связывается с первым элементом и назначается 1.
Пример добавление узла в список
NEw(e);
E^.info:=10;
E^.next:=b;
B:=e;
Просмотр списка
Данная операция используеться очень часто из-за последовательного доступа к элементам списка. Она используется при поиске элементов, при преобразование информации в узлах при выводе списка и ряде других операций.
Основой этой операции является переход о одного элемента списка к другому начиная с вершины списка.
Пример вывода списка
.
Var
B,c:pn;
Begin
C:=b;
While c<>nil do
Begin
Write(c^.info);
C:=c^.next;
End;
Пример
Необходимо заменить информационную часть четвертого элемента помесив в него какое либо значение например 10.
.
.
Var
B,c:pn;
I:byte;
Begin
.
.
C:=b;
I:=1;
While (i<>4)and(c<>nil) do {c^.next<>nil- остановиться на последнем}
Begin
C:=c^.next;
Inc(i);
End;
If i=4 then c^.info:=10;
Else
Write(‘в списке менее 4-х элеменов’);
.
.
.
Обращение к элементам списка возможны путем перечисления цепочки адресных полей (используется когда строго оговорено смещение элемента в списке относительно текущего).
Пример обращение к элементам, которые следует за элементом, на который указывает указатель С.
Пример:
C^.next^.info:=50;
C^.next^.next ^.info:=100;
Вставка элемента
Позволяет добавить новый элемент между двумя существующими.
Пусть требуется добавить новый узел в список после узла на который указывает указатель С .
Для решения этой задачи необходимо:
1.выделить место в памяти для нового узла, пусть адрес этого узла расположен в указателе Е.
2.связать новый узел с узлом следующим за С.
3.связать узел на который указывает С с созданным узлом.
4.заполнить информационную часть узла.
Для выполнения отмеченных действий необходимо выполнить следующую последовательность операторов:
New(e);
E^.next:=c^.next;
C^.next:=e;
E^.infj:=x;
Удаление узла из существующего списка.
Обычно удаление из списка связывается с перенаправлением связи к удаленному узлу, чтобы закрыть доступ к нему.
Удаление узла следующего за текущим.
Пусть указатель С указывает на какой либо элемент списка и требуется удалить элемент следующий за ним. Для решения этой задачи необходимо в поле next узла, на который указывает С, поместить содержимое поля next удаляемого узла, после этого связь с удаляемым узлом теряется.
C^.next:=c^.next.^next;
В данном случае нарушена только связь с узлом при этом в динамической памяти узел остался и занимает память узел остался и занимает память, для того чтобы удалить это элемент из ДП необходимо.
Сохранить адрес удаляемого узла.
Нарушить связь с удаляемым узлом.
Выполнить dispose с сохраненным адресом.
Пример удаления узла.
Var
Tmp:pn;
.
.
Tmp:=C^.next;
C^.next:=c^.next^.next;
Dispose(tmp);