Описание задачи и ограничений на ее выполнение — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Описание задачи и ограничений на ее выполнение

2020-03-31 168
Описание задачи и ограничений на ее выполнение 0.00 из 5.00 0 оценок
Заказать работу

 

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

Ограничения, установленные для реализации задачи:

·   многофайловость проекта;

·   наличие меню с удобным интуитивно понятным графическим интерфейсом;

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

·   возможность производить поиск всех подпоследовательностей максимальной длины;

·   работа с файлами.

Реализация задания

При реализации задания были разработаны две структуры: для работы с последовательностями posled и для организации поиска подпоследовательности внутри последовательности search. Список файлов проекта представлен в таблице 3.2.1. Для удобства доступа к файлам в MAIN.CPP описаны макросы для быстрого изменения пути до файлов: с использованием склейки строк MSTR(p) для текстовых файлов и подстановки DISK(p) для подключаемых файлов.


 

Таблица 3.2.1 Файлы проекта

Название файла Описание файла
EGAVGA.BGI Файл графического драйвера
INCLUDE.H Подключение стандартных библиотек, описание пользовательских типов, прототипы функций, подключение пользовательских файлов.
ALG.CPP Функции работы с последовательностями.
MENU.CPP Функции графического интерфейса.
MAIN.CPP Главный компилируемый файл проекта, содержащий функцию main().
ABOUT.TXT Текстовый документ, его содержимое отображается в пункте меню ABOUT.
OPEN.TXT Из этого файла загружается последовательность для дальнейшей обработки. Формат записи:
SAVE.TXT В этот файл записывается последовательность, если в меню OPTIONS было указано раздельное сохранение последовательностей.

 

Для реализации графического интерфейса была применена стандартная библиотека graphics.h, использующая видеодрайвер egavga.bgi. Функций взаимодействия с пользователем 4: menu(), options(), about(), start(). Меню построено на рекурсивном и взаимно рекурсивном принципе. Для уменьшения кода была создана функция отрисовки фонового изображения draw_note().

Функция menu() содержит графическое оформление меню, а так же информацию о взаимодействии с пользователем посредством клавиатуры. Для этих целей используется переменная типа static, указывающая, какой элемент меню был выбран сейчас. В случае нажатия на клавишу enter в зависимости от значения этой переменной вызывается одна из четырех функций start(), options(), about() или стандартная функция exit(int). В конце при естественном ходе программы функция menu() вызывает сама себя.

Функция start() запускает алгоритм решения задачи и содержит в себе подменю для определения источника последовательности. В случае выбора пункта меню “Createwith->File” последовательность загружается из файла Z:\open.txt. Если этого файла не существует, программа сообщает об этом и переходит в меню. Если был выбран пункт меню “Createwith->Generator”, то


 

Таблица 3.2.2 - Функции для работы с последовательностями - ALG.CPP

Название функции Описание функции
void posled_new (int n, posled*p); Функция заполняет структуру posled*p, передаваемую по указателю, пустой последовательностью размера n.
void posled_delete (posled*p); Функция освобождает память, занимаемую последовательностью.
void posled_rand (posled*p); Функция заполняет структуру случайной последовательностью, зависящей от глобальных переменных.
void posl_save (char*path, posled*p) Функция сохраняет последовательность в файле с путем доступа, указанным в строке path.
void posl_open (char*path, posled*p) Функция загружает последовательность из файла с путем доступа, указанным в строке path, в структуру p.
search index_search (posled*p, int n) Функция выполняет поиск длиннейшейподпоследовательности одинаковых чисел, встречающейся n-й раз. Если таковой не находится, индекс первого символа подпоследовательности равен -1.

 

При помощи функции posled_rand (posled*); генерируется последовательность из 48 элементов. Верхняя граница для генератора чисел задается в “MENU->OPTIONS” и равна по умолчанию 10. После генерации последовательности она распечатывается на экране и происходит поиск подпоследовательностей. Затем выделяются элементы подпоследовательностей, и внизу экрана выводится их длина. Функция рекурсивно вызывает себя в конце естественного хода программы.

Функция options() создает графический интерфейс для изменения параметров работы основного алгоритма.

Эти параметры - возможность записывать и считывать из разных файлов (open.txt и save.txt) либо из одного и того же (open.txt), а так же верхний предел генератора случайных чисел randmax. Управление производится стрелками вправо и влево с клавиатуры, выбор нужного пункта меню - стрелками вверх и вниз. Переменная randmax ограничена интервалом значений [1..99]. Функция рекурсивна.

Функция about() позволяет получить информацию, записанную в файле about.txt. Если этого файла нет, программа пишет об этом пользователю. По завершению выполнения функции после нажатия любой клавиши вызывается функция menu().

 


Поделиться с друзьями:

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.