Скачиваний:
22
Добавлен:
01.05.2014
Размер:
172.54 Кб
Скачать

Отчет по лабораторной работе №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»

Вывод:

Работоспособность программы на описанных тестах подтверждается разработчиком

Достоинством программы является ее простота, понятность и наглядность. Она доступно демонстрирует решение поставленной задачи.

Недостатком программы является отсутствие гибкости – пользователь не может продолжать работу с исходным списком после формирования кольцевых списков, для этого необходимо заново запускать программу.

6

Соседние файлы в папке Лабораторная работа 1