Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Топ:
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Дисциплины:
|
из
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().
|
|
|
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!