From 33c029ce7fc023c051b0e8d76909b9e6f0642a02 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Tue, 19 Nov 2024 19:21:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=20=D0=B1=D0=B8=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab3/report/report.tex | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lab3/report/report.tex b/lab3/report/report.tex index 43bb2fe..0fb4df9 100644 --- a/lab3/report/report.tex +++ b/lab3/report/report.tex @@ -240,6 +240,30 @@ decryptCaesar alphabet shift = \end{lstlisting} + \subsection{Представление текста в виде последовательности бит} + + Код функций для преобразования текста в последовательность бит и обратно представлен в листинге~\ref{lst:bit}. Функция \texttt{textToBits} принимает текст в виде строки и возвращает его представление в виде вектора бит. Она использует вспомогательную функцию \texttt{charToBits}, которая преобразует символ в список бит, представляющих его код ASCII в двоичном виде. Для преобразования последовательности бит обратно в текст используется функция \texttt{bitsToText}. Она рекурсивно делит вектор бит на блоки по 8 бит, преобразует каждый блок в символ ASCII и объединяет их в строку. В процессе этого преобразования используется функция \texttt{bitsToInt}, которая преобразует вектор бит в целое число, интерпретируя их как двоичное представление этого числа. + + +\begin{lstlisting}[caption={Функции для конвертации текста в последовательность бит и обратно.}, label={lst:bit}] +textToBits :: String -> VU.Vector Int +textToBits text = VU.fromList $ concatMap charToBits text + +charToBits :: Char -> [Int] +charToBits c = [if testBit (ord c) i then 1 else 0 | i <- [7,6..0]] + +bitsToText :: VU.Vector Int -> String +bitsToText bits + | VU.null bits = [] + | otherwise = (chr $ bitsToInt (VU.take 8 bits)) : bitsToText (VU.drop 8 bits) + +bitsToInt :: VU.Vector Int -> Int +bitsToInt bits = + sum [bit * (2 ^ index) | (bit, index) <- zip (VU.toList bits) [len,(len - 1)..0]] + where + len = VU.length bits - 1 +\end{lstlisting} + \newpage \section {Результаты работы программы}