Лабораторная работа 1 / Отчет1
.docОтчет по лабораторной работе №1
Исходная постановка задачи:
Задан линейный однонаправленный список целочисленных значений. Построить два кольцевых списка, содержащих:
- первый – только чётные значения из заданного списка, а
- второй – только нечетные значения из заданного списка.
В первом списке значения должны следовать в порядке, обратном порядку их расположения в исходном списке, а во втором – в порядке следования значений в исходном списке.
Анализ задачи:
Задача реализуется с использованием типа данных класс на языке С++. Необходимо реализовать элемент списка, линейный однонаправленный список и кольцевой список в виде отдельных классов и разработать программу, реализующую поставленную задачу.
Формальная постановка задачи:
Исходные данные:
В роли входных данных выступает однонаправленный линейный список целочисленных значений. Эти значения вводит пользователь в процессе работы программы.
Выходные данные:
В роли выходных данных выступают два кольцевых однонаправленных списка, составленных из значений исходного списка в соответствии с поставленной задачей.
Связь выходных и исходных данных:
Связь осуществляется согласно поставленной задаче – из значений исходного списка формируются соответственно 2 кольцевых списка: первый включает в себя чётные значения в порядке, обратном их расположению в исходном списке, а второй – нечётные в таком же порядке, как в исходном списке.
Спецификация программы:
Исходные данные:
В роли входных данных выступает экземпляр класса «линейный однонаправленный список».
Функции программы по обработке исключительных ситуаций:
Неустановленное программой нажатие клавиш и ввод некорректных значений не контролируется.
Выходные данные:
В роли выходных данных выступают 2 экземпляра класса «кольцевой однонаправленный список», созданные согласно вышеприведенному описанию.
Сценарий диалога:
Макет диалога с пользователем.
Интерфейс программы прост и интуитивно понятен.
1. При запуске программы открывается окно, в котором отражена основная информация о программе и предложены 2 возможных действия: либо создание списка и вставка в него элемента, либо продолжение работы (в данном случае это будет выход из программы).
рис. 1.
2. Работа по формированию исходного списка. Пользователь вводит целочисленные значения, формируя список. Элементы вставляются в конец списка.
рис. 2.
3. После формирования нужного списка пользователь выбирает операцию по продолжению работы. Из исходного списка сформированы требуемые. Программа выводит сообщения о создании списков и элементов, результат своей работы – исходный список и 2 получившихся, и сообщения об уничтожении элементов и списков.
рис. 3.
Разработка структур данных и алгоритмов
Алгоритмы:
Решение задачи можно разбить на этапы:
- формирование классов «Элемент списка», «Линейный список», «Кольцевой список».
- реализация основной программы.
Замечание: программа должна иметь простой и понятный интерфейс.
Модель структур данных:
В качестве структур данных используется линейный и кольцевой список.
Схема линейного списка
Схема кольцевого списка
Таблица методов класса «Элемент списка»
Имя функции |
Назначение |
Параметры |
Результаты |
||
Входные |
Выходные |
Транзитные |
|||
CElem |
Создание элемента списка |
CElem* next=NULL, int val0=0 |
- |
- |
Создание элемента списка |
~CElem |
Удаление элемента (сообщение) |
- |
- |
- |
Сообщение об удалении элемента списка |
set_next |
Установка атрибутов |
CElem* next0 |
- |
- |
В соответствии с назначением |
get_next |
- |
CElem* get_next |
- |
||
set_val |
Int val0 |
- |
- |
||
get_val |
- |
Int get_val |
- |
Таблица методов класса «Линейный список»
Имя функции |
Назначение |
Параметры |
Результаты |
||
Входные |
Выходные |
Транзитные |
|||
CList |
Создание списка |
CElem* head0=NULL,CElem* cur0=NULL |
- |
- |
Создание линейного списка |
~CList |
Удаление списка |
- |
- |
- |
Удаление линейного списка |
set_head |
Установка атрибутов |
CElem* head0 |
- |
- |
В соответствии с назначением |
get_head |
- |
CElem*get_head |
- |
||
set_cur |
CElem* cur0 |
- |
- |
||
get_cur |
- |
CElem* get_cur |
- |
||
GoBOL |
Переход в начало списка |
- |
- |
- |
В соответствии с назначением |
GoNext |
Переход к следующему элементу списка |
- |
- |
- |
|
EOList |
Окончание списка |
- |
Int EOList |
- |
Возврат значения |
NullList |
Пустота списка |
- |
Int NullList |
- |
|
InsToNull |
Вставка элемента в пустой список |
CElem* elem0 |
- |
- |
В соответствии с назначением |
Insert |
Вставка элемента в список |
CElem* elem0 |
- |
- |
В соответствии с назначением |
PrintList |
Вывод списка на экран |
- |
- |
- |
В соответствии с назначением |
Таблица методов класса «Кольцевой список»
Имя функции |
Назначение |
Параметры |
Результаты |
||
Входные |
Выходные |
Транзитные |
|||
CCirList |
Создание кольцевого списка |
CElem* head0=NULL, CElem* cur0=NULL |
- |
- |
Создание кольцевого списка |
~CCirList |
Удаление списка |
- |
- |
- |
Удаление кольцевого списка |
set_headcir |
Установка атрибутов |
CElem* head0 |
- |
- |
В соответствии с назначением |
get_headcir |
- |
CElem* get_headcir |
- |
||
set_curcir |
CElem* cur0 |
- |
- |
||
get_curcir |
- |
CElem* get_curcir |
- |
||
GoBOLCir |
Переход в начало кольцевого списка |
- |
- |
- |
В соответствии с назначением |
GoNextCir |
Переход к следующему элементу кольцевого списка |
- |
- |
- |
|
EOCirList |
Окончание кольцевого списка |
- |
Int EOCirList |
- |
Возврат значения |
NullCirList |
Пустота кольцевого списка |
- |
Int NullCirList |
- |
|
InsToNull |
Вставка элемента в пустой список |
CElem* elem0 |
- |
- |
В соответствии с назначением |
InsertCirToBegin |
Вставка элемента в начало кольцевого списка |
CElem* elem0 |
- |
- |
В соответствии с назначением |
InsertCirToEnd |
Вставка элемента в конец кольцевого списка |
CElem* elem0 |
- |
- |
В соответствии с назначением |
PrintCirList |
Вывод кольцевого списка на экран. |
- |
- |
- |
Вывод на экран значения элементов списка. Если список пуст вывод сообщения «List is empty» |
Контрольный пример:
Исходный список |
Первый кольцевой список (четные значения в обратном порядке) |
Второй кольцевой список (нечетные значения в прямом порядке) |
-1 50 7 4 -21 8 3 |
8 4 50 |
-1 7 -21 3 |
1 3 5 7 |
«List is empty» |
1 3 5 7 |
8 6 4 2 |
2 4 6 8 |
«List is empty» |
Вывод:
Работоспособность программы на описанных тестах подтверждается разработчиком
Достоинством программы является ее простота, понятность и наглядность. Она доступно демонстрирует решение поставленной задачи.
Недостатком программы является отсутствие гибкости – пользователь не может продолжать работу с исходным списком после формирования кольцевых списков, для этого необходимо заново запускать программу.