- •Структура программы на Паскале.
- •Стандартные типы Паскаля.
- •Операторы в Паскале.
- •Цикл с параметром.
- •Типовые задачи на операторов цикла.
- •Операторы целочисленного деления.
- •Вложенные циклы.
- •Структурированные типы данных.
- •Массивы.
- •Многомерные массивы.
- •Строки.
- •Множества.
- •Записи.
- •Работа с текстовыми файлами.
- •Особенности работы с текстовым файлом:
- •Типизированные файлы.
- •Особенности работа с типизированными файлами.
- •Подпрограммы.
- •Структура подпрограмм.
- •1. Заголовок
- •2. Описательная часть
- •3. Тело подпрограммы
- •Оформление формальных параметров, которые определяет режим взаимодействия с основной программой.
- •Особенности передачи структурированных данных подпрограммы.
- •Опережающие описания.
- •Функциональный тип. Процедурный тип.
- •Сортировки.
- •Сортировка бинарными включениями.
- •Сортировка простых выборов.
- •Сортировки простым обменом.
- •Шейкер-сортировка.
- •Сортировка Шелла.
- •Модули.
- •Структура модуля.
- •Особенности компиляции программ с подключаемыми модулями.
- •Циклические ссылки модулей друг на друга.
- •Стандартные модули в Паскале.
- •Динамические переменные.
- •Динамические структуры.
- •Однонаправленные списки.
- •Формирование списков. Формирование очереди.
- •Формирование стека.
- •Классическое формирование очереди (по Вирту).
- •Работа со списками.
- •1) Проход по списку;
- •2) Добавление элемента в список;
- •Удаление элемента из списка.
- •«Древовидные структуры»
- •Удаление элемента из дерева
- •Самоупорядочивающийся список
- •Частотный словарь
- •Нерекурсивное формирование дерева
Динамические переменные.
Динамические переменные – переменные, оперативная память под которые выделяется во время работы программы в специализированной области оперативной памяти – «кучи». При описании таких переменных перед именем типа указывается символ «^»(a:integer; - статич.; b:^integer; - динамическая).
В тексте программы динамическая переменная представлена своим адресом или указателем ( имя динамической переменной).
Begin
b – указатель
b^ - значение
Для того, чтобы работать с указателями, не нужно выделять память под динамические переменные. Для работы со значением динамической переменной сначала используют процедуру NEW (указатель). Необходимо сначала выделить память под переменную, а затем только работать со значением.
new(b);
b^:=5;
c:=b;
Чтобы обозначить адрес, который ни на что не ссылается, используется
c:=nil;
Графически:
Динамические структуры.
Чаще всего единичные динамические переменные не используются. Используются связанные динамические структуры. Связь между элементами осуществляется путем хранения в каждом узле структуры не только значения, но и адреса на предыдущий или последующий элементы. Т.е. узел структуры определяется структурированным типом записи. В зависимости от хранящихся адресов все динамические структуры делятся на линейные и ветвящиеся. К линейным структурам относятся списки.
Список – структура, в узле которой хранится адрес на предыдущий или последующий элемент, либо же и тот, и другой. Если адрес один, то список – однонаправленный. К ним относятся очередь и стек. Если адреса два – список двунаправленный.
Однонаправленные списки.
Стек и очередь отличаются алгоритмом формирования.
Очередь – однонаправленный список, в узле которого хранится адрес на следующий элемент (принцип FIFO).
Стек - однонаправленный список, в узле которого хранится адрес на предыдущий элемент (принцип LIFO).
Т.к. стек и очередь отличаются только алгоритмом формирования, поэтому узел или элемент списка будут описываться одинаково.
type sp=^el;
el=record;
inf:integer;
next:sp;
end;
Т.к. память под динамические переменные память не выделяется, то только для динамических переменных может быть нарушено основное правило Паскаля.
Формирование списков. Формирование очереди.
n p p
q q
var n,p,q:sp;
x:integer;
begin read(x);
new(p);
p^.nif:=x;
p^.next:=nil;
n:=p;
repeat
new(q);
read(x);
q^.inf:=x;
q^.next:=nil;
p^.next:=q;
p:=q;
until...
Формирование стека.
q q
p p
begin
p:=nil;
repeat
new(q);
read(x);
q^.inf:=x;
q^.next:=p;
p:=q;
until...