Автоматизация работы с базами данных

fio : string[40];

num : word;

pol : char;

dat : string[10];

dol : string[40];

left, right : pTree

end;

Из приведенной структуры видно, что используется тот же порядок расположения полей и те же типы полей данных записи, только в конце записи добавлены два поля указатели соответственно на левое и правое поддеревья.

При использовании процедуры Move из перемен

ной одного типа (например, Tree) в переменную другого типа (например, CompF) необходимо копировать 103 Бт. Тогда совпадающие поля будут иметь одно значение, а значения полей-указателей не изменятся.

Исходя из данных размеров компоненты дерева резервировалось место динамической памяти для программы с помощью директиву компилятору:

{$M 65520,111000,655360},

где :

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

- Второй параметр указывает минимальный размер свободной динамической памяти (кучи), при котором можно выполнять программу. Исходя из значения данного параметра, можно сделать вывод, что если размер кучи будет менее 111000 Бт, то программа не будет запускаться на выполнение. Данное значение выбрано в расчете для работы с деревом из 100 узлов по 111 Бт каждый.

- Третий параметр указывает максимально возможный объем кучи выделяемой для программы. В нашем случае указан максимально возможный размер для паскаль-программы, но при этом необходимо учитывать, что в случае параллельной работы программ, другим программ место для работы может не остаться.

Для чтения и записи данных в файл используются стандартные процедуры ввода/вывода и работы с файлами и файловой системой, которые оговаривались в разделе «3. Программное обеспечение».

5.4 Описание подпрограмм

Используемые в программе, расположенные как в самой программе (Rab.pas), так и в пользовательском модуле (trees.pas), подпрограммы упоминались при описании логической структуры программы и хорошо прокомментированы в тексте программы. Поэтому ограничимся перечислением существующих подпрограмм с описанием их назначения и рассмотрением особенностей работы.

Пользовательский модуль trees.pas: - Procedure print(v : pTree);

Процедура вывода содержимого компоненты двоичного дерева поиска. Формальный параметр – указатель на компоненту.

- Procedure add(var x : CompF; var p : pTree);

Рекурсивная процедура добавления компоненты в двоичное дерево поиска. Метод – поиск по дереву поиска по ключу и добавление компоненты-листа. Формальные параметры: запись с данными о работнике и указатель на корень. Ключ, по которому осуществляется поиск – поле num первого формального параметра – записи с данными о работнике. Данные параметр является формальным параметром-переменной (секция var), то есть ссылкой на фактический параметр-переменную. Данный прием объясняется следующим образом. При рекурсии возможна большая рекурсивная вложенность вызовов. Передача в качестве параметра-значения может привести к переполнению стека, так как на каждом вызове в стеке для данного будет параметра сохраняться 103 Бт. При использовании параметра-переменной в стеке сохраняется 4 Бт. Экономия очевидна и составляет на каждом вызове 99 Бт.

- Procedure del(x : word; var p : pTree);

Рекурсивная процедура удаления компоненты из двоичного дерева поиска. Метод - поиска по дереву узла; если лист или имеет одно поддерево, то удаление с восстановлением связей; если два поддерева - поиск в левом поддереве крайнего правого узла с одним поддеревом, его удаление с предварительной записью его данных в удаляемый узел. Формальные параметры: табельный номер и указатель на корень. При условии нахождения работнике выводится информация о нем посредством вызова процедуры Print и выдается запрос о подтверждении удаления. Для поиска крайнего правого узла с одним поддеревом в случае удаления узла с двумя поддеревьями используется вложенная процедура procedure delt(var r : pTree). Это также рекурсивная процедура, имеющая в качестве формального параметра указатель на компоненту дерева.

Основная программа rab.pas:

- Procedure AddRab;

Процедура добавления работника. В ней осуществляется ввод данных о новом работнике, затем вызывается процедура включения в дерево поиска add.

- Procedure DelRab;

Процедура удаления работника. В процедуре осуществляется ввод табельный номер удаляемого работника, затем вызов процедуры исключения компоненты из дерева del.

- Procedure SearchRab;

Процедура организации поиска и отбора работников по критерию. Метод - обход дерева слева-направо с анализом критерия поиска и, в случае необходимости, вывод на экран. При вызове данной процедуры запрашивается критерий поиска: по фамилии, должности, табельному номеру. Далее осуществляется обход дерева слева-направо с помощью вложенной рекурсивной процедуры Procedure Search(t : pTree). При проверке критерия поиска используются глобальные по отношению к процедуре переменные с, tmps и tmpc. Для поиска по фамилии и группе используется поиск подстроки (ключ поиска) в строке. Таким образом, происходит вывод с фильтраций по совпадающему ключу. То есть при поиске по номеру группы будут выводиться все работники заданной группы. Или, например, при указании в качестве ключа поиска фамилии «Иванов» будут выводиться все работники, у которых в поле fio есть подстрока «Иванов» (Иванова, Иванович, Ивановна и т.д.).

- procedure PrintRab(r : pTree);

Рекурсивная процедура обхода дерева поиска слева-направо с выводом данных о работнике посредством вызова процедуры Print. Для дерева поиска выводится в порядке, отсортированном по ключу, в нашем случае выводится отсортированный список работников по табельному номеру.

- Procedure LoadOfFile;

Процедура загрузки данных из файла после запуска программы с добавлением считанных данных в дерево поиска посредством вызова процедуры Add.

- Procedure SaveToFile(t : pTree);

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

- Procedure Menu;

Процедура организации диалога с пользователем. Пользователь осуществляет выбор действия, в зависимости от выбранного действия осуществляется вызов соответствующей процедуры.

5.5 Перечень допустимых значений входных данных и проверочные

Страница:  1  2  3  4  5  6  7  8  9  10 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы