- •Структура программы на Паскале.
- •Стандартные типы Паскаля.
- •Операторы в Паскале.
- •Цикл с параметром.
- •Типовые задачи на операторов цикла.
- •Операторы целочисленного деления.
- •Вложенные циклы.
- •Структурированные типы данных.
- •Массивы.
- •Многомерные массивы.
- •Строки.
- •Множества.
- •Записи.
- •Работа с текстовыми файлами.
- •Особенности работы с текстовым файлом:
- •Типизированные файлы.
- •Особенности работа с типизированными файлами.
- •Подпрограммы.
- •Структура подпрограмм.
- •1. Заголовок
- •2. Описательная часть
- •3. Тело подпрограммы
- •Оформление формальных параметров, которые определяет режим взаимодействия с основной программой.
- •Особенности передачи структурированных данных подпрограммы.
- •Опережающие описания.
- •Функциональный тип. Процедурный тип.
- •Сортировки.
- •Сортировка бинарными включениями.
- •Сортировка простых выборов.
- •Сортировки простым обменом.
- •Шейкер-сортировка.
- •Сортировка Шелла.
- •Модули.
- •Структура модуля.
- •Особенности компиляции программ с подключаемыми модулями.
- •Циклические ссылки модулей друг на друга.
- •Стандартные модули в Паскале.
- •Динамические переменные.
- •Динамические структуры.
- •Однонаправленные списки.
- •Формирование списков. Формирование очереди.
- •Формирование стека.
- •Классическое формирование очереди (по Вирту).
- •Работа со списками.
- •1) Проход по списку;
- •2) Добавление элемента в список;
- •Удаление элемента из списка.
- •«Древовидные структуры»
- •Удаление элемента из дерева
- •Самоупорядочивающийся список
- •Частотный словарь
- •Нерекурсивное формирование дерева
Нерекурсивное формирование дерева
Сложность нерекурсивного формирования дерева заключается в то, что на каждом шаге построения дерева необходимо запомнить количество элементов в поддеревьях и кроме адреса не достроенного элемента необходимо обеспечить барьер, для того чтобы обратное восхождение по дереву осуществлялось именно до этого барьера.
type ref=^node;
node=record
key: integer;
l,r: ref; end;
var i,n,nl,nr,x: integer;
root,p,q,r,dmy: ref;
s:array[1..30] of record;
n: integer;
rf: ref; end;
begin read(n); new(root); new(dmy); i:=1;
s[1].n:=n; s[1].rf:=root;
repeat n:=s[i].n; r:=s[i].rf; i:=i+1;
if n=0 then r^.r:=nil else begin p:=dmy;
repeat nl:=ndw2; nr:=n-nl-1; read(x);
new(q); q^.key:=x; i:=i+1; s[i].n:=nr; s[i].rf:=q; n:=nl;
p^.l:=q; p:=q;
until n=0;
q^.l:=nil; r^.r:=dmy^.l; end;
until i:=0; end.
При работе с динамической памятью можно использовать нетипизированый указатель. В ячейку памяти выделенную под указатель POINTER можно размещать любую информацию.
Для выделения памяти используем процедуру NEW(<…>).
Для высвобождения памяти используем DISPOSE(<…>).
Недостатком данной процедуры является образование «дырок» в «куче».