Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
алгоритмы1.docx
Скачиваний:
36
Добавлен:
10.06.2015
Размер:
1.98 Mб
Скачать

29. Функции и процедуры в псевдокодах

Объявляя функции включают заголовок и тело, заголовок открывается function, после которого указывается через пробел имя функции, в ( ) указывается список формальных параметров → «:» тип возвращаемого значения «;».

В списке формальных параметров могут находится секции 3-х видов:

  1. Параметры переменной:

Начинается с var

  1. Параметры константы

  1. Параметры значения:

Никакого слова в начале нет

Внутри каждой секции приводится список именованных формальных параметров через «,», а после «:» тип параметров данной секции, это может быть любой тип, но задавать его нужно именем, т.е тип должен быть объявлен до объявления функции.

Кол-во секций и их расположение выбирает программист, список может быть пустым, в этом случае ( ) можно опустить.

Поясним назначение параметров разных видов, опираясь на аналог C++.

  1. Параметры переменной передаются по адресу

  2. Параметры значения передаются по значению

  3. Параметры константы отличаются тем, что в теле функции их значения менять запрещается

Тип результ. возвращ. функций может быть любым, но его тоже нужно задавать именем.

Кроме того результат может быть возвращен через параметры переменных.

Тело функции включающее объявление локальных конструкций в частности может быть пустым.

Операторная часть задается как блок, в блоке должен быть хотя бы 1-н оператор обеспечивающий формирование результата возвращаемого в функцию.

Пусть функция имеет имя f1, тогда возможны следующие формы указанных операторов:

- f1:= <выражение>;

- Result := <выражение>; // тут используется имя переменной Result, которое подстраивает свой тип под тип возвращаемого результата

- return (<выражение>);

В теле функции может быть несколько операторов указанных типов. Функция прекращает работу в следующих случаях:

  1. При выполнении return

  2. При выполнении exit

  3. При достижении 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.