Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx55 / Курсовая работа(5).docx
Скачиваний:
51
Добавлен:
01.08.2013
Размер:
127.96 Кб
Скачать

2.8 Итоги анализа сравнения языков программирования Паскаль и Си

В рассмотренных языках программирования высокого уровня Си и Паскаль имеются как свои плюсы, так и свои минусы. Удобство в использовании языка программистом является важным фактором при оценке и сравнении языков, а гибкость языка позволяет расширить возможности при реализации алгоритмов разных уровней. Язык Паскаль громоздок и имеет ограниченный набор возможностей по сравнению со многими языками, однако он достаточно иерархичен и структурирован. Язык Си гибок и логичен в своей структуре, имеет гораздо больше возможностей для работы, однако таит в себе много опасностей. Керниган говорит: «Си — инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво» [4]. Поэтому использование языка Си оправдано лишь при достаточном уровне знаний в сфере программирования. На сегодняшний день очевидно, что язык Паскаль не может достойно конкурировать с языком Си, так как при усложнении задач, встающих перед программистами, требуется в первую очередь гибкость и функциональность.

3 Практическая реализация задания

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

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

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

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

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

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

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

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

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

При реализации задания были разработаны две структуры: для работы с последовательностями 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(). Скриншоты главного меню и меню вывода результата представлены соответственно на рисунках 3.2.1 и 3.2.2.

Содержимое файла ALG.CPP указано в таблице 3.2.2. Рассмотрим содержимое файла MENU.CPP более подробно.

Рисунок 3.2.1 – Главное меню программы

Рисунок 3.2.2 – Меню представления данных

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

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

Соседние файлы в папке docx55