diff --git a/coursework/report/.gitignore b/coursework/report/.gitignore new file mode 100644 index 0000000..e2b8f4e --- /dev/null +++ b/coursework/report/.gitignore @@ -0,0 +1,5 @@ +**/* +!.gitignore +!report.tex +!img +!img/* \ No newline at end of file diff --git a/coursework/report/report.tex b/coursework/report/report.tex new file mode 100644 index 0000000..bc9e61e --- /dev/null +++ b/coursework/report/report.tex @@ -0,0 +1,245 @@ +\documentclass[a4paper, final]{article} +%\usepackage{literat} % Нормальные шрифты +\usepackage[14pt]{extsizes} % для того чтобы задать нестандартный 14-ый размер шрифта +\usepackage{tabularx} +\usepackage[T2A]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[russian]{babel} +\usepackage{amsmath} +\usepackage[left=25mm, top=20mm, right=20mm, bottom=20mm, footskip=10mm]{geometry} +\usepackage{ragged2e} %для растягивания по ширине +\usepackage{setspace} %для межстрочного интервала +\usepackage{moreverb} %для работы с листингами +\usepackage{indentfirst} % для абзацного отступа +\usepackage{moreverb} %для печати в листинге исходного кода программ +\usepackage{pdfpages} %для вставки других pdf файлов +\usepackage{tikz} +\usepackage{graphicx} +\usepackage{afterpage} +\usepackage{longtable} +\usepackage{float} + + + +% \usepackage[paper=A4,DIV=12]{typearea} +\usepackage{pdflscape} +% \usepackage{lscape} + +\usepackage{array} +\usepackage{multirow} + +\renewcommand\verbatimtabsize{4\relax} +\renewcommand\listingoffset{0.2em} %отступ от номеров строк в листинге +\renewcommand{\arraystretch}{1.4} % изменяю высоту строки в таблице +\usepackage[font=small, singlelinecheck=false, justification=centering, format=plain, labelsep=period]{caption} %для настройки заголовка таблицы +\usepackage{listings} %листинги +\usepackage{xcolor} % цвета +\usepackage{hyperref}% для гиперссылок +\usepackage{enumitem} %для перечислений + +% Настраиваем листинги, чтобы они использовали счётчик figure +% \AtBeginDocument{ +% \renewcommand{\thelstlisting}{\thefigure} % Листинги используют тот же счетчик, что и рисунки +% \renewcommand{\lstlistingname}{Рис.} % Меняем подпись на "Рисунок" +% } + +% Автоматически увеличиваем счетчик figure перед каждым листингом +% \let\oldlstlisting\lstlisting +% \renewcommand{\lstlisting}[1][]{% +% \refstepcounter{figure}% Увеличиваем счетчик figure +% \oldlstlisting[#1]% Вызываем оригинальную команду lstlisting +% } + +\newcommand{\specialcell}[2][l]{\begin{tabular}[#1]{@{}l@{}}#2\end{tabular}} + + +\setlist[enumerate,itemize]{leftmargin=1.2cm} %отступ в перечислениях + +\hypersetup{colorlinks, + allcolors=[RGB]{010 090 200}} %красивые гиперссылки (не красные) + +% подгружаемые языки — подробнее в документации listings (это всё для листингов) +\lstloadlanguages{ Haskell} +% включаем кириллицу и добавляем кое−какие опции +\lstset{tabsize=2, + breaklines, + basicstyle=\footnotesize, + columns=fullflexible, + flexiblecolumns, + numbers=left, + numberstyle={\footnotesize}, + keywordstyle=\color{blue}, + inputencoding=cp1251, + extendedchars=true +} +\lstdefinelanguage{MyC}{ + language=Haskell, +% ndkeywordstyle=\color{darkgray}\bfseries, +% identifierstyle=\color{black}, +% morecomment=[n]{/**}{*/}, +% commentstyle=\color{blue}\ttfamily, +% stringstyle=\color{red}\ttfamily, +% morestring=[b]", +% showstringspaces=false, +% morecomment=[l][\color{gray}]{//}, + keepspaces=true, + escapechar=\%, + texcl=true +} + +\textheight=24cm % высота текста +\textwidth=16cm % ширина текста +\oddsidemargin=0pt % отступ от левого края +\topmargin=-1.5cm % отступ от верхнего края +\parindent=24pt % абзацный отступ +\parskip=5pt % интервал между абзацами +\tolerance=2000 % терпимость к "жидким" строкам +\flushbottom % выравнивание высоты страниц + + +% Настройка листингов +\lstset{ + language=Haskell, + extendedchars=\true, + inputencoding=utf8, + keepspaces=true, + captionpos=t, +} + +\begin{document} % начало документа + + + + % НАЧАЛО ТИТУЛЬНОГО ЛИСТА + \begin{center} + \hfill \break + \hfill \break + \normalsize{МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ\\ + федеральное государственное автономное образовательное учреждение высшего образования «Санкт-Петербургский политехнический университет Петра Великого»\\[10pt]} + \normalsize{Институт компьютерных наук и кибербезопасности}\\[10pt] + \normalsize{Высшая школа технологий искусственного интеллекта}\\[10pt] + \normalsize{Направление: 02.03.01 <<Математика и компьютерные науки>>}\\ + + \hfill \break + \hfill \break + \hfill \break + \hfill \break + \large{Отчет по курсовой работе}\\ + \large{по дисциплине}\\ + \large{<<Функциональное программирование>>}\\ + \large{Вариант 5}\\ + \hfill \break + + % \hfill \break + % \hfill \break + \end{center} + + \small{ + \begin{tabular}{lrrl} + \!\!\!Студент, & \hspace{2cm} & & \\ + \!\!\!группы 5130201/20102 & \hspace{2cm} & \underline{\hspace{3cm}} &Тищенко А. А. \\\\ + \!\!\!Преподаватель,\\ \hspace{-5pt}к. т. н., доц. & \hspace{2cm} & \underline{\hspace{3cm}} & Моторин Д. Е. \\\\ + &&\hspace{4cm} + \end{tabular} + \begin{flushright} + <<\underline{\hspace{1cm}}>>\underline{\hspace{2.5cm}} 2024г. + \end{flushright} + } + + \hfill \break + % \hfill \break + \begin{center} \small{Санкт-Петербург, 2024} \end{center} + \thispagestyle{empty} % выключаем отображение номера для этой страницы + + % КОНЕЦ ТИТУЛЬНОГО ЛИСТА + \newpage + + \tableofcontents + + + % \newpage + + % \section*{Введение} + + % \addcontentsline{toc}{section}{Введение} + + \newpage + \section {Постановка задачи} + + В рамках курсовой работы необходимо реализовать два синтаксических анализатора, решающих следующие задачи: + + \begin{enumerate} + \item Разработка синтаксического анализатора для обработки строк из текстового файла. Требуется: + \begin{itemize} + \item Читать строки, содержащие значения и бинарные операции, из текстового файла (.txt), название которого вводит пользователь. + \item Разбирать значения, представленные целыми числами в десятичной системе счисления. + \item Обрабатывать бинарные операции: сложение, вычитание, умножение, деление. + \item Вычислять результат выражения и выводить его на экран. + \end{itemize} + + \item Разработка синтаксического анализатора текста и генератора продолжения текста. Задачи: + \begin{enumerate} + \item Считать текст из файла, название которого вводит пользователь, и выполнить его синтаксический анализ: + \begin{itemize} + \item Разбить текст на предложения, используя следующие правила: слова состоят только из букв; предложения состоят из слов и разделяются символами: \texttt{. ! ? ; : ( )}. + \item Удалить из текста все символы пунктуации и цифры. + \end{itemize} + + \item Построить модель N-грамм: + \begin{itemize} + \item Использовать биграммы и триграммы. + \item Составить словарь, где ключами являются одно слово или пара слов, а значениями — списки всех уникальных возможных продолжений. + \item Сохранить словарь в текстовый файл (.txt). + \end{itemize} + + \item Реализовать пользовательское взаимодействие: + \begin{itemize} + \item При вводе одного или пары слов возвращать случайную строку длиной от 2 до 15 слов, основанную на созданном словаре. + \item Если введенное слово отсутствует в ключах словаря, выводить сообщение об этом. + \end{itemize} + + \item Организовать диалог между двумя моделями N-грамм, созданными на основе двух различных текстов: + \begin{itemize} + \item Пользователь задает начальное слово или пару слов и количество сообщений (глубину диалога). + \item Ответ каждой модели основывается на последнем слове (или предпоследнем, если последнее отсутствует в словаре) из предыдущего сообщения оппонента. + \end{itemize} + \end{enumerate} + + В качестве текстов для построения моделей использовать произведения Антона Павловича Чехова. + \end{enumerate} + + + \newpage + \section {Математическое описание} + + + + + \newpage + \section {Особенности реализации} + + + + + \newpage + \section {Результаты работы программы} + + + + + \newpage + \section*{Заключение} + \addcontentsline{toc}{section}{Заключение} + + + + \newpage + \section*{Список литературы} + \addcontentsline{toc}{section}{Список литературы} + + \vspace{-1.5cm} + \begin{thebibliography}{0} + \bibitem{JuicyPixels} + Hackage -- unescaping-print: Tiny package providing unescaping versions of show and print, URL: \url{https://hackage.haskell.org/package/unescaping-print}, Дата обращения: 09.12.2024. + \end{thebibliography} +\end{document} \ No newline at end of file