Подсчитать в заданном текстовом файле количество символов, слов, строк, абзацев. Вывести результаты на экран. Подсчитать количество слов в предложениях и вывести статистическую таблицу, в которой длине предложения в словах будет соответствовать количество таких предложений в анализируемом тексте.
Подсчитать в заданном текстовом файле количество вхождений каждого слова. Вывести результат в виде таблицы (слово, количество вхождений) в несколько результирующих файлов: список по алфавиту, список по количеству вхождений.
Найти в заданном тексте все палиндромы (слова, которые одинаково читаются от начала к концу и от конца к началу: «оно», «кок»). А так же слова, которые при прочтении от конца к началу дают другие существующие в этом тексте слова («кот»-«ток»).
Найти в тексте все последовательности идущих подряд одинаковых символов и заменить их сигнатурой {символ, количество}. Минимальная длинна последовательности, которая может подвергаться замене, задаётся пользователем. Сохранить результат в файле. Предусмотреть режим восстановления оригинального текста. Использовать режим восстановления текста как для получения оригинального текста в виде файла, так и для проверки правильности работы основного алгоритма.
Пример: текст «длинношеее животное» должен быть заменён текстом «длиннош{e,3} животное».
На оценку «хорошо»
Выделить в заданном текстовом файле все диалоги (начинающиеся с новой строки и символа «тире»). Сохранить диалоги в отдельных текстовых файлах. Использовать правила построения диалогов, применяющиеся в русскоязычных текстах. Примечание: В обязательном порядке протестировать программу на больших по размеру текстах.
Подсчитать в заданных текстовых файлах количество вхождений каждого слова. Вывести результат в виде таблицы (слово, количество вхождений) в несколько результирующих файлов: список по алфавиту, список по количеству вхождений. Перед выводом статистики в файл предоставить пользователю информацию о количестве различных слов и предложить выбрать, какое количество слов должно быть записано в результирующие файлы.
Обеспечить сохранение собираемой статистической информации во внешнем файле между сеансами работы программы с тем, чтобы накапливать базу данных по анализируемым файлам.
Найти в тексте все повторяющиеся подстроки длиннее заданной пользователем величины (например, длиннее 5-ти символов). Заменить все вхождения подстроки кроме первого специальной сигнатурой: {индекс первого символа оригинальной строки, длина цепочки}. Перед заменой убедиться, что в тексте нет комбинаций символов, которые могут ошибочно восприниматься как формируемая сигнатура. Сохранить сгенерированный текст в файл. Предусмотреть режим восстановления оригинального текста. Использовать режим восстановления текста как для получения оригинального текста в виде файла, так и для проверки правильности работы основного алгоритма.
Пример: текст «тестовая строка» должен быть заменен на текст «тестовая {2,2}рока» при условии, что рассматриваются подстроки, начиная с длинны в 2 символа.
Для двух заданных текстовых файлов найти самую длинную общую подстроку. Программа должна выводить позицию, с которой текст начинается в каждом из файлов, длину строки и текст самой строки, так, чтобы гарантировать, что выводимый текст уместится на экране (80 столбцов, 22 строки).
Придумать три различных собственных механизма шифрования файла для того, чтобы зашифрованный вариант нельзя было прочитать. Записать зашифрованные данные на диск. Предоставить программу, позволяющую восстановить оригинальный файл по зашифрованному. Программа должна самостоятельно определять, какой именно вариант был использован. Один из вариантов должен предоставлять пользователю ввести ключ (пароль), используемый при шифровании и расшифровке.
Реализовать поиск подстроки в строке методом Кнута, Морриса и Пратта.
Примечание: Описание метода цепей Кнута, Мориса и Пратта можно найти в книге Н.Вирт «Алгоритмы и структуры данных».
На оценку «отлично»
На основании текстов, получаемых на входе программы, сгенерировать частотную таблицу буквенных комбинаций для генерации цепей Маркова на символьном уровне. Обеспечить возможность задания пользователем длинны символьной последовательности в частотной таблице (то есть на основании какого количества символов определяется вероятность подстановки нового символа). Обеспечить сохранение частотной таблицы в файле и чтение из файла при обработке следующего файла. Дополнять частотную таблицу с каждым прочитанным файлом. Предоставить возможность генерации цепей Маркова по собираемым статистическим таблицам. Генерация текста должна производиться по символам.
Примечание: Описание метода цепей Маркова можно найти в книге Дж. Бентли «Жемчужины программирования», 2-е издание, 2002 г, стр.197-202.
На основании текстов, получаемых на входе программы, сгенерировать частотную таблицу комбинаций слов для генерации цепей Маркова на уровне слов. Обеспечить возможность задания пользователем длинны последовательности слов в частотной таблице (то есть на основании какого количества слов определяется вероятность подстановки нового слова). Обеспечить сохранение частотной таблицы в файле и чтение из файла при обработке следующего файла. Дополнять частотную таблицу с каждым прочитанным файлом. Предоставить возможность генерации цепей Маркова по собираемым статистическим таблицам. Генерация текста должна производиться по словам.
Примечание: Описание метода цепей Маркова можно найти в книге Дж. Бентли «Жемчужины программирования», 2-е издание, 2002 г, стр.197-202.
Реализовать утилиту, производящую сравнение двух текстовых файлов и выводящую различающиеся строки или группы строк. Программа должна получать имена файлов в виде параметров командной строки и выдавать результат в стандартный консольный поток вывода (cout).
Примечание: В качестве прототипа использовать программу fc.exe, поставляющуюся в составе Windows XP.
Написать программу, осуществляющую поиск в тексте подстроки, наиболее близкой к заданной. Критерий схожести строк сформировать самостоятельно. Программа должна обеспечивать ожидаемый пользователем разумный результат (то есть найденная строка должна быть, действительно, близка к заданной подстроке). Выводить на экран результаты поиска в виде фрагментов текста, содержащих искомую подстроку (начиная с предыдущей строки и заканчивая следующей строкой после строки с найденной подстрокой). Результаты поиска выводить в упорядоченном виде (по убыванию схожести). Количество выводимых вариантов должно задаваться пользователем.
Модульные тесты
Каждая программа должна сопровождаться набором модульных тестов, позволяющих проверить её работоспособность на примерах с заранее известным результатам.
Модульные тесты должны запускаться автоматически или в случае выбора пользователем соответствующего пункта меню программы.
Модульные тесты должны содержать минимум три тестовых набора данных для автоматической проверки.
Разделение на файлы
Программа должна быть разделена (минимум) на четыре независимых cpp-файла: