- •Процедура выполняети задание ф11.
- •2. Логическая структура данных
- •«Рисунок 2.1 - Логическая структура линейного односвязного списка»
- •Эти операции затем повторяются с оставшимися n2 элементами, затем с n3 элементами, пока не останется только один элемент наибольший.
- •«Рисунок 4.2 – Поиск наименьшего элемента»
- •Перемещение наименьшего элемента на первую позицию:
СОДЕРЖАНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 22
ПРИЛОЖЕНИЕ А 23
1.Способ декомпозиции задачи.
1.1 Список модулей входящих в программных комплексов.
unit MainUnit;
Является главным модулем приложения. Отвечает за организацию интерфейса приложения и за выполнения выбранных пользователем программного продукта действий.
unit Perem;
Модуль содержит описания всех новых введенных типов данных в приложения.
unit Struct;
Этот модуль содержит в себе все процедуры для обработки линейного односвязного списка(формирование, просмотр, удаление, добавление, редактирование, поиск, задание Ф11).
1.2 Основные процедуры, входящие в состав программных комплексов.
unit MainUnit;
procedure NewXDClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Создать(Файл хоздоговоров)). Выполняет организацию ввода данных для файла хоздоговора.
procedure NewWTKClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Создать(Файл исполнителей)). Выполняет организацию ввода данных для файла исполнителей.
procedure NewBANKClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Создать(Файл отделения сбербанка)). Выполняет организацию ввода данных для файла отделения сбербанка.
procedure AddColumnClick(Sender: TObject);
Процедура вызывается при выборе пункта всплывающего меню Добавить столбец. Выполняет добавление одного пустого столбца в таблицу для ввода данных.
procedure DeleteColumnClick(Sender: TObject);
Процедура вызывается при выборе пункта всплывающего меню Удалить столбец. Выполняет удаление выбранного столбца из таблицы для ввода данных.
procedure OpenXDClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Открыть(Файл хоздоговоров)). Выполняет открытие файла хоздоговоров с последующим выводом всех записей файла на экран.
procedure OpenWTKClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Открыть(Файл исполнителей)). Выполняет открытие файла исполнителей с последующим выводом всех записей файла на экран.
procedure OpenBankClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Открыть(Файл отделения сбербанка)). Выполняет открытие файла отделения сбербанка с последующим выводом всех записей файла на экран.
procedure SaveXDClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Сохранить(Файл хоздоговоров)). Выполняет сохранение данных из таблицы в файл хоздоговоров.
procedure SaveWTKClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Сохранить(Файл исполнителей)). Выполняет сохранение данных из таблицы в файл исполнителей.
procedure SaveBANKClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Сохранить(Файл отделение сбербанка)). Выполняет сохранение данных из таблицы в файл отделение сбербанка.
procedure ExitClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Файл(Выход). Обеспечивает завершения работы приложения.
procedure ShapingClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Формирование. Выполняет последовательность действий для формирования линейного односвязного списка.
procedure ViewingClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Операции(Просмотр). Отвечает за вывод записей линейного односвязного списка на экран.
procedure DelZapClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Операции(Корректировка(Удаление записи)). Отвечает за последовательность действий для удаления записи из линейного односвязного списка.
procedure InsertZapClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Операции(Корректировка(Добавление записи)). Отвечает за последовательность действий для добавления записи в линейно односвязный список.
procedure EditZapClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Операции(Корректировка(Редактирование записи)). Отвечает за последовательность действий для редактирования записи в линейном односвязном списке.
procedure GrowthClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Операции(Сортировка(По возрастанию)). Отвечает за вызов сортировки над линейным односвязным списком по возрастанию.
procedure DecreaseClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Операции(Сортировка(По убыванию)). Отвечает за вызов сортировки над линейным односвязным списком по убыванию.
procedure SearchingClick(Sender: TObject);
Процедура вызывается при выборе пункта меню Операции(Поиск). Отвечает за последовательность действий для поиска записей.
procedure BitBtn1Click(Sender: TObject);
Процедура вызывается при нажатии на кнопку ОК. Отвечает за выполнения действий в зависимости от того, какой пункт меню был выбран.
procedure BitBtn3Click(Sender: TObject);
Процедура вызывается при нажатии на кнопку Выход. Отвечает за выполнения действий в зависимости от того, какой пункт меню был выбран.
procedure N1Click(Sender: TObject);
Процедура вызывается при выборе пункта меню Вставка записи. Отвечает за последовательность действий для вставки записи.
procedure N121Click(Sender: TObject);
Процедура вызывается при выборе пункта меню Задание Ф11. Отвечает за последовательность действий для выполнения задания Ф11.
procedure Button1Click(Sender: TObject);
Процедура вызывается при нажатии кнопки Вывести. Отвечает за вывод результата выполнения задания Ф11.
unit Struct;
procedure ShapingLos;
Процедура выполняет формирование линейного односвязного списка.
procedure ViewingLos;
Процедура осуществляет просмотр линейного односвязного списка.
procedure Delete;
Процедура выполняет удаление одной записи в списке.
procedure Add;
Процедура осуществляет добавление записи в конец списка.
procedure Insert;
Процедура позволяет редактировать записи линейного односвязного списка.
procedure Sort(TypeSort : Boolean);
Процедура осуществляет сортировку записей линейного односвязного списка прямым выбором . Если TypeSort =True, то сортировка осуществляет по возрастанию иначе, если TypeSort =False, то по убыванию.
procedure Find;
Процедура производит поиск записей в линейном односвязном списке.
procedure F11;
Процедура выполняети задание ф11.
1.3 Иерархическая структура состава программных компонентов.
Ниже указано в каком файле размещается каждый модуль программного комплекса, а так же указано место расположение форм приложения. Выше был приведен список процедур каждого модуля программного продукта.
program Project1;
uses
Forms,
MainUnit in 'MainUnit.pas' {Main},
Perem in 'Perem.pas',
Struct in 'Struct.pas';
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TMain, Main);
Application.Run;
end.
2. Логическая структура данных
Наиболее простой способ объединить или связать некоторое множество элементов — это "вытянуть их в линию", то есть организовать линейный связный список (linear linked list).
В линейном односвязном списке (ЛОС) каждый элемент состоит из двух различных по назначению видов полей: содержательные (информационные) поля и поле структурного (или логического) указателя. В содержательных полях хранятся данные, ради которых и создавался список. Некоторые содержательные поля могут содержать указатели на данные, не вместившиеся в содержательные поля — такие указатели называются дополнительными или вторичными (secondary pointer). Поле логического указателя (logical pointer) хранит адрес в памяти следующего элемента списка. Пользуясь указателем (адресом), можно получить доступ к элементу списка, а от него к следующему и т. д., пока не будет достигнут последний элемент . Поле указателя последнего элемента списка должно содержать признак "пустого" указателя (Nil), свидетельствующий о конце списка.
Свойство линейности односвязного списка определяется линейностью логической упорядоченности его элементов: для каждого элемента (кроме первого и последнего) имеется единственный предыдущий и единственный последующий элементы. Организованный таким образом список называют еще однонаправленным (one-way list).
Дескриптор ЛОС может быть реализован в виде отдельной записи и может содержать такую информацию о списке, как
1) код структуры,
2) имя списка,
3) указатель (адрес) начала списка (First) — этот указатель называется указателем списка (list pointer),
4) указатель на текущий элемент (Current),
5) текущее количество элементов в списке,
6) описатель (дескриптор) элемента.
В одном из содержательных полей каждого элемента иногда размещают так называемый указатель возврата (backward pointer), ссылающийся на дескриптор.
Физическая структура ЛОС характеризуется физической несмежностью элементов, причем в памяти в любой текущий момент времени между элементами одного списка могут находиться элементы другой динамической структуры.
«Рисунок 2.1 - Логическая структура линейного односвязного списка»
3. Статические данные и структуры.
«Рисунок 3.1 - Глобальные переменные»
Имя переменной |
Адрес в памяти |
Тип переменной |
Объем Памяти в байтах |
Назначение переменной |
CountAdjustment |
$BC2130 |
Byte |
1 |
Выбор |
zXD. Number |
$BC1F94 |
Byte |
1 |
Поля записи Хоздого-воров |
zXD. Date_of_conclusions |
$BC1F95 |
TString |
30 |
|
zXD. Date_of_terminations |
$BC1FB4 |
TString |
30 |
|
zXD. Subject_of_agreement |
$BC1FD3 |
TString |
30 |
|
zXD. Name_of_organization |
$BC1FF2 |
TString |
30 |
|
zXD. Sing_of_termination |
$BC2011 |
Byte |
1 |
|
zXD. Cost |
$BC2012 |
Word |
2 |
|
zWTK. Surname |
$BC2014 |
TString |
30 |
Поля записи Исполни-телей |
zWTK. Name |
$BC2033 |
TString |
30 |
|
zWTK. Patronymic_name |
$BC2052 |
TString |
30 |
|
zWTK. Of_birth |
$BC2072 |
Word |
2 |
|
zWTK. Code |
$BC2074 |
TString |
30 |
|
zWTK. Sign |
$BC2093 |
Byte |
2 |
|
zWTK. Remuneration_Amount |
$BC2094 |
Word |
2 |
|
zWTK. Home_Address |
$BC2096 |
TString |
30 |
|
zWTK. Branch_Number |
$BC20B5 |
String[4] |
4 |
|
zWTK. Accouting_count |
$BC20BA |
String[7] |
7 |
|
zBANK. Branch_Name |
$BC20C2 |
String[4] |
4 |
Поля записи Отделе-ния сбер-банка |
zBANK. City |
$BC20C7 |
TString |
30 |
|
zBANK. Address |
$BC20E6 |
TString |
30 |
|
zBANK. Name_of_branch |
$BC2105 |
TString |
30 |
|
zBANK. Bank_Code |
$BC2124 |
TString[3] |
3 |
«Рисунок 3.2 – Текущие переменные»
Имя переменной |
Адрес в памяти |
Тип переменной |
Объем Памяти в байтах |
Назначение переменной |
Cur |
$BC2128 |
Tlos |
4 |
Указатель на Элемент первого уровня иер-й стр-ры |
Cur^.Surname |
$BC23A4 |
TString |
30 |
Информацион-ные поля линейного односвязного списка |
Cur^.Name |
$BC23A5 |
TString |
30 |
|
Cur^. Patronymic_name
|
$BC23C4 |
TString |
30 |
|
Cur^. Of_birth
|
$BC23E3 |
Word |
2 |
|
Cur^.Code |
$BC2402 |
TString |
30 |
|
Cur^. Branch_Number
|
$BC2421 |
String[4] |
4 |
|
Cur^.Next |
$BC2424 |
Tlos |
4 |
Указатель на следующий эл. |
«Рисунок 3.3 - Локальные переменные»
Имя переменной |
Адрес в памяти |
Тип переменной |
Объем Памяти в байтах |
Назначение переменной |
I |
$44579C |
Byte |
1 |
Для счёта |
J |
$44579D |
Byte |
1 |
Для счёта |
Count |
$68FBE4 |
Byte |
1 |
Счётчик |
FXD |
$68FBC0 |
TString |
30 |
Имя ф. ХD |
FWTK |
$68FBA1 |
TString |
30 |
Имя ф. WTK |
Code |
$68FB82 |
Byte |
1 |
Код |
Len |
$68FBE0 |
Byte |
1 |
Длина строки |
CheckLos |
$68FBDF |
Boolean |
1 |
Проверка |
Cur |
$68F8A8 |
TLos |
4 |
Вспом. Указат. |
i |
$68FAD5 |
Byte |
|
Вспомогатель-ные переменные |
j |
$68FAD6 |
|
||
q |
$68FAD7 |
|
||
K |
$68FAD8 |
|
||
N |
$68FAD9 |
|
||
X |
$68FADA |
ZapLos |
122 |
Вспомогател. записи |
Y |
$68FAB58 |
ZapLos |
122 |
4. Алгоритм обработки структуры.
Алгоритм сортировки прямым выбором.
Этот метод основан на следующем алгоритме:
выбираем (выделяем) элемент с наименьшим (среди всех N элементов) ключом, допустим это элемент a[k]:
a[k].Key = min(a[0].Key, a[1].Key, …, a[HighIndex].Key)
элемент a[k] меняется местами с первым элементом, т. е. с элементом a[0].
Затем выбираем элемент с наименьшим ключом среди всех элементов, кроме элемента a[0]; меняем его местами с элементом a[1] и т. д.