- •Структура программы на Паскале.
- •Стандартные типы Паскаля.
- •Операторы в Паскале.
- •Цикл с параметром.
- •Типовые задачи на операторов цикла.
- •Операторы целочисленного деления.
- •Вложенные циклы.
- •Структурированные типы данных.
- •Массивы.
- •Многомерные массивы.
- •Строки.
- •Множества.
- •Записи.
- •Работа с текстовыми файлами.
- •Особенности работы с текстовым файлом:
- •Типизированные файлы.
- •Особенности работа с типизированными файлами.
- •Подпрограммы.
- •Структура подпрограмм.
- •1. Заголовок
- •2. Описательная часть
- •3. Тело подпрограммы
- •Оформление формальных параметров, которые определяет режим взаимодействия с основной программой.
- •Особенности передачи структурированных данных подпрограммы.
- •Опережающие описания.
- •Функциональный тип. Процедурный тип.
- •Сортировки.
- •Сортировка бинарными включениями.
- •Сортировка простых выборов.
- •Сортировки простым обменом.
- •Шейкер-сортировка.
- •Сортировка Шелла.
- •Модули.
- •Структура модуля.
- •Особенности компиляции программ с подключаемыми модулями.
- •Циклические ссылки модулей друг на друга.
- •Стандартные модули в Паскале.
- •Динамические переменные.
- •Динамические структуры.
- •Однонаправленные списки.
- •Формирование списков. Формирование очереди.
- •Формирование стека.
- •Классическое формирование очереди (по Вирту).
- •Работа со списками.
- •1) Проход по списку;
- •2) Добавление элемента в список;
- •Удаление элемента из списка.
- •«Древовидные структуры»
- •Удаление элемента из дерева
- •Самоупорядочивающийся список
- •Частотный словарь
- •Нерекурсивное формирование дерева
Удаление элемента из дерева
Основная проблема удаления элемента из дерева возникает когда удаляется элемент с двумя потомками. Для примера удаление элемента из дерева рассмотрим случай удаления из бинарного сбалансированного упорядоченного дерева.
В упорядоченном дереве удаление элемента упрощается так как используется алгоритм переноса информационной части на место удаляемого элемента из соответствующего листа и удаляется этот лист.
Вирт доказал:
Если относительно удаляемого элемента взять правый лист из левого поддерева, либо же левый лист из правого поддерева и переместить в информационную часть удаляемого узла, а затем удалить этот лист, то упорядоченность не измениться.
Procedure delete(x:integer; var p:ref);
Var Q:ref;
Procedure del(var r:ref);
Begin
if r^.r^< >nil then del(r^.r)
else begin Q^.key:=r^.key; Q:=r; r:=r^.l; end; end;
begin
if p< >nil then
if x<p^.key then delete(x,p^.l)
else if x>p^.key then delete(x,p^.r)
else Q:=p;
if Q.r=nil then p:=Q^.l
else if Q^.l=nil then p:=Q^.r
else del(Q^.l); end.
Самоупорядочивающийся список
Задан текстовый файл. Вывести слова из этого файла в алфавитном порядке. Для решения задачи использовать списковую структуру. Слова в тексте разделяются только пробелами.
type sp=^el;
el=record
inf:string;
next:sp; end;
var n,p,q:sp;
t:text;
c:char;
st:string;
begin assign(t.’text.txt’);
reset(t);
st:=’ _ ‘; read(t,c);
while (c< >’_ ‘) and (not eof(t)) and(not eoln(t)) do begin
st:=st+c; read(t,c); end;
if eoln(t) then readln(t);
new(p); p^.inf:=st; p^.next:=nil; st:=’ _ ‘; read(t,c);
while (c< >’_ ‘) and (not eof(t)) and (not eoln(t)) do begin
st:=st+c; read(t,c); end;
if eoln(t) then readln(t); new(q); q^.inf:=st; q^.next:=nil;
if p^.inf<q^.inf then begin
n:=p^; p^.next:=q; end;
else begin n:=q; q^.next:=p; end;
repeat read(t,c); st:=’_’;
while (c< >’_ ‘) and (not eof(t)) and (not eoln(t)) do begin
st:=st+c; read(t,c); end;
if eoln(t) then readln(t);
if st< >’_ ‘ then begin
if n^.inf >st then begin
new(p); p^.inf:=st; p^.next:=n; n:=p; end;
else begin p:=n;
while (p^.inf < st) and (p^.next < > nil) do
p:=p^.next; new(q); q^.inf:=st; q^.next:=p^.next;
p^.next:=q; end;
until eof(t);
p:=n;
while p< >nil do begin
writeln(p^.inf); p:=p^.next; end; end.
Частотный словарь
Задан текстовый файл. Вывести слова из этого файла с частотой их встречаемости.
type sp=^el;
el=record
inf:string;
next:sp; end;
var n,p,q:sp;
t:text;
c:char;
st:string;
begin assign(t.’text.txt’);
reset(t);
st:=’ _ ‘; read(t,c);
while (c< >’_ ‘) and (not eof(t)) and(not eoln(t)) do begin
st:=st+c; read(t,c); end;
if eoln(t) then readln(t);
new(p); p^.inf:=st; n:=p; p^.count:=1; p^.next:=nil;
while st:=p^.inf do begin p^.count:=p^.count+1;
st:=’ _ ‘; read(t,c);
while (c< >’_ ‘) and (not eof(t)) and(not eoln(t)) do begin
st:=st+c; read(t,c); end;
if eoln(t) then readln(t); end;
new(q); q^.inf:=st; q^.count:=1; q^.next:=nil;
p^.next:=q;
repeat
st:=’ _ ‘; read(t,c);
while (c< >’_ ‘) and (not eof(t)) and(not eoln(t)) do begin
st:=st+c; read(t,c); end;
if eoln(t) then readln(t);
p:=n;
while (p^.next < > nil) and (p^.inf < > st) do p:=p^.next;
if p^.inf=st then p^.count:= p^.count+1
else begin new(q);
q^.inf:=st; q^.count :=1; p^.next:=q; q^.next:=nil; end;
Until eof(t);
p:=n;
while p< >nil do begin
writeln(p^.inf,’_ ‘,p^.count);
p:=p^.next; end; end.