по дисциплине «Программирование»
Форматирование текстового файла (начальный балл 4)
1. Задание.
2. Структурное описание разработки.
3. Функциональное описание.
4. Описание работы программы на контрольном примере.
5. Выводы.
6. Приложение: текст программы с комментариями.
Задание
Термином называется слово, написанное прописными (большими) буквами. Читается текстовый файл и формируется список терминов с сохранением номера абзаца, в котором он обнаружен. Формируется файл отсортированных в алфавитном порядке терминов со ссылками на определяющие их абзацы.
Структурное описание разработки
Данная программа является средством для выделения из текста произвольного объема необходимых слов (терминов) и запоминания позиций того, откуда они были взяты. Структура данных состоит из переменной типа char* (сам термин) и переменной типа int (номер абзаца, в котором он был встречен впервые). В программе задан динамический массив структур в виде глобальной переменной a (в данном случае нет необходимости для создания второй такой переменной, поэтому ее можно задать глобально, а объявление ее в качестве локального параметра затруднило бы работу с ней). В структуре разработан метод увеличения размерности массива при добавлении в него нового элемента. Использование массива в данном случае более приемлемо, чем использование других структур (список, дерево и проч.), так как на всем протяжении программы возникает необходимость обращения по индексу.
При запуске программы открывается файла с неотредактированным текстом, из которого следует считать текст с терминами. Если файл открыт удачно, начинается считывание. Каждое считывание – очередные 80 символов файла (по умолчанию). Знак того, что перешли к следующему абзацу – три пробела подряд. Случается, что при очередном считывании они распадаются, то есть могут возникнуть ситуации:
1) Считано сначала два пробела, затем один
2) Считан сначала один пробел, затем два
В этом случае в действие вступает функция, которая анализирует то, чем началась и закончилась очередная считанная строка. Если в ней начало или конец состоит из двух пробелов, то счетчик абзацев увеличивается на единицу.
Затем проверяется, не влезли ли при считывании в середину термина (подобно тому, как влезали в середину «трех пробелов»). Если это произошло, вызывается функция, указатель в файле позиционируется туда, откуда была считана последняя строка, уменьшается количество считываемых элементов, и вновь производится чтение.
Если опять попали в середину, функция рекурсивно вызывает саму себя. Процедура повторяется, пока термин не окажется за пределами читаемой строки. Позже он окажется в начале очередной считываемой строки. В ходе этой процедуры длина считываемой строки станет меньше 80 символов.
После этих проверок начинается непосредственная обработка строки. Критерием начала слова служит переход с символа «пробел» на «не пробел». Если существует такой переход, новое слово начинает записывается в строку до тех пор, пока не дойдем до конца слова, который может быть представлен как: пробел (слово в середине предложения), знак вопроса, восклицательный знак, запятая, точка (слово в конце предложения), скобка или символ конца строки.
Затем проверяется, является ли оно термином, то есть анализируется код каждой буквы по таблице кодов ASCII. Если слово не является термином, но похоже на него (то есть это предлог или союз, состоящий из одной буквы и стоящий в начале предложения), то он отбрасывается ввиду его непригодности.
Следом происходит проход по структуре назад и выяснение, был ли этот термин раньше или он встречен впервые.
Если слово удовлетворяет и этому критерию, помимо двух других (многобуквенное, состоящее лишь из заглавных букв), то оно является термином и заносится в структуру (при этом под него выделяется дополнительная память). Движение по строке вперед продолжается. В противном случае движение продолжается без занесения термина в структуру.
Когда все возможные термины считаны, начинается процесс сортировки. Предлагается на выбор любой из ее видов: по возрастанию или по убыванию. Сортировка осуществляется по стандартной схеме методом вставок. Один из задействованных в этом методе циклов (внешний) проходит всю структуру данных, другой (внутренний) – лишь то, что внешний еще не прошел.
Критерий для перемены мест двух членов структуры – сравнение терминов в лексико-графической форме (побуквенно).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.