- •27. Составной оператор (блок). Условный оператор. Оператор перехода goto и помеченный оператор. Оператор цикла с параметром (оператор for)
- •28. Оператор цикла с предусловием (оператор while). Оператор цикла с постусловием (оператор repeat). Оператор варианта (оператор case).
- •29. Функции и процедуры в псевдокодах
- •30.Бинарное дерево поиска. Сортировка элементов, хранящихся в бинарном дереве поиска.
- •31. Оператор проверки принадлежности элемента множеству. Оператор вставки элемента в бинарное дерево поиска.
- •32.Оператор удаления элемента из бинарного дерева
- •33. Оценка эффективности алгоритмов на бинарном дереве поиска.
- •34. Частично упорядоченные деревья – основные понятия. Оператор удаления наиболее приоритетного элемента из частично упорядоченного двоичного дерева.
- •35. Оператор вставки элемента в частично упорядоченное дерево.
- •36. Реализация частично упорядоченного двоичного дерева двоичной кучей.
- •37. Нагруженные деревья – основные понятия. Реализации узлов нагруженного дерева (атд treenode). Основные операторы для атд treenode.
- •38. Реализация нагруженного дерева (атд tree). Структура программы для проверки орфографии с помощью нагруженного дерева.
- •39. Структура 2-3 дерева. Поиск записи с заданным ключом в 2-3 дереве.
- •40. Вставка элемента в 2-3 дерево.
- •41. Удаление элемента из 2-3 дерева
- •42. Остовные деревья минимальной стоимости (одмс) – основные понятия. Основное свойство одмс (с доказательством).
- •43. Алгоритм Прима построения одмс.
- •44. Понятие задачи коммивояжера. Жадный алгоритм для приближенного решения задачи коммивояжера.
- •45. Задача коммивояжера для полного графа с неравенством треугольника. Основные шаги алгоритма решения задачи. Утверждение 5.1 максимально погрешности алгоритма.
29. Функции и процедуры в псевдокодах
Объявляя функции включают заголовок и тело, заголовок открывается function, после которого указывается через пробел имя функции, в ( ) указывается список формальных параметров → «:» тип возвращаемого значения «;».
В списке формальных параметров могут находится секции 3-х видов:
Параметры переменной:
Начинается с var
Параметры константы
…
Параметры значения:
Никакого слова в начале нет
Внутри каждой секции приводится список именованных формальных параметров через «,», а после «:» тип параметров данной секции, это может быть любой тип, но задавать его нужно именем, т.е тип должен быть объявлен до объявления функции.
Кол-во секций и их расположение выбирает программист, список может быть пустым, в этом случае ( ) можно опустить.
Поясним назначение параметров разных видов, опираясь на аналог C++.
Параметры переменной передаются по адресу
Параметры значения передаются по значению
Параметры константы отличаются тем, что в теле функции их значения менять запрещается
Тип результ. возвращ. функций может быть любым, но его тоже нужно задавать именем.
Кроме того результат может быть возвращен через параметры переменных.
Тело функции включающее объявление локальных конструкций в частности может быть пустым.
Операторная часть задается как блок, в блоке должен быть хотя бы 1-н оператор обеспечивающий формирование результата возвращаемого в функцию.
Пусть функция имеет имя f1, тогда возможны следующие формы указанных операторов:
- f1:= <выражение>;
- Result := <выражение>; // тут используется имя переменной Result, которое подстраивает свой тип под тип возвращаемого результата
- return (<выражение>);
В теле функции может быть несколько операторов указанных типов. Функция прекращает работу в следующих случаях:
При выполнении return
При выполнении exit
При достижении end закрывается блок тела функции
Пример:
function f1 (var g, n: integer; const r:char; a, b: Double): DMO;
type
var …
labl …
procedure …
function …
begin …
…
end
В операторе после begin могут использоваться формальные и локальные переменные. Тут могут использоваться глобальные имена, если их действия не подавляют действия одномерных конструкций объявленных в списке формальных параметров.
Процедура – это функция не возвращающая результат, в тоже время результат может быть передан во внешнюю среду через параметры вместо function исп procedura. Список формальных параметров оформлен по тем же правилам, что и у функции.
Пример заголовка:
Procedure P1 (var g, w: integer; const r:char; a, b: double);
Тело оформлено по тем же правилам и имеет ту же семантику, что и тело функции, единственное отличие, что в теле процедуры не должно быть оператора вида:
P1 := <выраженим>;
Result: <выражение>;
return (<выражение>);
Соответственно процедура остается при exit и при достижении end, закрывающим тело процедуры.
30.Бинарное дерево поиска. Сортировка элементов, хранящихся в бинарном дереве поиска.
Будем отталкиваться от простой модели мира, а именно от множества однотипных элементов. Будем полагать, что в этом множестве задан линейный порядок «≤» - предщшествования. Рассмотрим бинарное дерево поиска и такие алгоритмы на нем, как DELETE, MEMBER (проверка принадлежности), MIN (поиск минимального значения).
Бинарным деревом поиска называют дерево, все вершины которого упорядочены, каждая вершина имеет не более двух потомков (назовём их левым и правым), и все вершины, кроме корня, имеют родителя. Вершины, не имеющие потомков, называются листами.

Рис. 4.1
Рассмотрим случай k-арного дерева:
- если дерево Т является пустым, то в списке обхода заносится пустая запись
- если дерево состоит из 1-го уза, то в список заносится этот узел
- если дерево Т состоит из узла n, то Т1, Т2, … , Тn

Рис. 4.2
то посещают все узлы поддерева Т1, после этого переходят в корень n, а далее последовательно в симметричном порядке посещают поддеревья Т2, Тn.
Если такой обход применен к бинарному дереву поиска, то мы получим упорядоченный набор хранилища в дереве.
Работу рассмотрим на примере бинарного дерева поиска изображенного на рисунке 4.1
В соответствии с правилами симметрии обхода сначала надо рассмотреть поддерево Т1.

Рис. 4.3
У Т1 есть 2 поддерева, левое поддерево пустое, а правое с одной вершиной. Т.к в левом нет вершин, то первым в списке появится «6». А далее появится единственный подузел Т1,2 «7», после включают корень исходного дерева, т.е «10».

Рис. 4.4
В конечном счете получаем: 6, 7, 10, 11, 12, 13, 14.
