
- •Министерство образования и науки, молодежи и спорта Украины Черниговский государственный технологический университет Кафедра информационных и компьютерных систем
- •Техническое задание
- •Шаповал в.Ю. Гр. Ки-111
- •Сохранение данных в двоичном файле и их извлечение.
- •Упаковку данных в архив и извлечение их из архива.
- •Получение справки об использовании системы.
- •Содержание
- •1Постановка задачи
- •Пассажир: ф.И.О., номер паспорта.
- •2Анализ решаемой задачи
- •3Исследование существующих методов организации структур данных
- •4Определение путей и методов решения задачи
- •5Реализована архивация файла, который содержит мультисписокПроектирование программы
- •5.1Разработка структуры данных
- •5.1.1Логическая структура
- •5.1.2Физическое представление структуры данных
- •5.2Разработка типов данных
- •5.3Использование указателей на функции для создания инвариантных подпрограмм
- •5.4Разработка интерфейсов пользователя
- •5.5Алгоритм функционирования системы
- •5.5.1Алгоритм функции добавления элемента в список
- •5.5.2Алгоритм поиска элемента в отсортированном списке
- •5.5.3Алгоритм удаления элемента из списка
- •5.6Состав программы
- •5.6.1Основные функции программы
- •6Использование внешних приложений
- •Список использованных источников
5.5Алгоритм функционирования системы
Вначале работы программы необходимо создать новый или открыть(или разархивировать) существующий список. Для создания нового списка достаточно кликнуть по кнопке «Создать» и после чего в диалоговом окне ввести имя списка, после этого становятся активными все пункты главного меню. В этот момент можно просматривать и редактировать список. Когда все необходимые действия совершены, то есть возможность сохранить список в файл или запаковать его в архив. Удобство сохранения списка заключается в том, что все уровни мультисписка сохраняются в один файл.
На рисунке 5.5 показан алгоритм функционирования программы.
Рисунок 5.5 – Алгоритм функционирования программы
5.5.1Алгоритм функции добавления элемента в список
Функция добавления получает в качестве параметров адрес начала списка, в который нужно вставить элемент, позицию, куда нужно вставить элемент, позицию нового элемента (индекс в массиве).
Функция работает по такому принципу: если функция поиска элемента выдала место вставки в средине массива указателей на элемент, то нужно произвести сдвиг всех элементов в массиве для освобождения необходимого индекса. После этого записываем указатель на элемент по освобождённому индексу, при этом увеличиваем количество элементов в массиве на 1.
Блок-схема функции добавления элемента в список изображена на рисунке 5.6
Рисунок 5.6 – Алгоритм добавления элемента в список
5.5.2Алгоритм поиска элемента в отсортированном списке
Функция поиска получает в качестве параметров указатель на начало списка элементов, ключ поиска, параметр функционального типа - функцию сравнения, а возвращает позицию указателя на искомый элемент и признак успешного поиска.
Функция имеет двойное назначение. Используется для нахождения указателя на элемент по ключу и индекса вставки указателя на новый элемент.
Функция работает методом половинного деления: присваиваем левой границе ноль, а правой – количество элементов в массиве, минус один (элементы начинаются с нуля). Найденный элемент присваиваем среднему элементу массива. Функцией сравнения проверяем: совпадает ли наш ключ со средним элементом в массиве. Если да то мы нашли место элемента в массиве, и выходим из процедуры. В противном случае проверяем полученый ключ - больше или меньше он среднего элемента в массиве. Данная проверка даст нам новые значения левой или правой границы. Обязательно нужно проверить не вышла ли наша левая граница за правую, и если не выйшла то алгоритм продолжается с начала. Иначе присваиваем позиции элемента нижнюю границу.
Блок-схема функции поиска методом половинного деления элемента в списке изображена на рисунке 5.7.
Рисунок 5.7 – Алгоритм поиска элемента
5.5.3Алгоритм удаления элемента из списка
Процедура удаления получает в качестве параметров адрес начала списка, из которого нужно удалить элемент и позицию указателя на удаляемый элемент.
Она работает так: перед ее вызовом функцией поиска находим позицию удаляемого элемента. Освобождаем память, которую он занимает. Если элемент был в средине массива указателей, то производим сдвиг элементов. В конце уменьшаем количество элементов в массиве на 1.
Блок-схема функции удаления элемента изображена на рисунке 5.8.
Рисунок 5.8 – Алгоритм удаления элемента