Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Топ:
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Интересное:
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2020-03-31 | 168 |
5.00
из
|
Заказать работу |
|
|
Формулировка задачи звучит следующим образом: В целочисленном массиве найти наиболее длинную цепочку одинаковых подряд стоящих элементов. Необходимо реализовать программу, способную генерировать случайную последовательность чисел либо загружать ее из предварительно подготовленного файла, и производить поиск максимальной по длине подпоследовательности, а затем производить сохранение последовательности в файл.
Ограничения, установленные для реализации задачи:
· многофайловость проекта;
· наличие меню с удобным интуитивно понятным графическим интерфейсом;
· возможность изменения параметров программы без изменения исходного кода;
· возможность производить поиск всех подпоследовательностей максимальной длины;
· работа с файлами.
Реализация задания
При реализации задания были разработаны две структуры: для работы с последовательностями 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!