найти на сайте
Главная2-й курс3-й курс4-й курс5-й курсСпецкурсыСсылкиКарта(версия для печати)

Избыточное кодирование (MASM)

Вариант 3-го практического задания для групп 110, 111 (2005)

Постановка задачи

Реализовать:

На вход модулю «coder» подаётся текстовая последовательность, заканчивающаяся символом конца файла (CTRL+Z). После чего модуль выводит закодированную последовательность, используя шестнадцатеричную запись.

Модуль «coder2 должен считать из стандартного ввода текстовую Результат обработки модуль должен направить в стандартный вывод в текстовом шестнадцатеричном формате (по две шестнадцатеричных цифры на каждый байт выходной последовательности).

Входная последовательность разбивается на блоки по 6 байт и дополняется 2 байтами для индикации возможного изменения битов и восстановления.

b0b1b2b3b4b5b6b7
байты исходной последовательностиSumParity

Байт Sum представляет собой арифметическую сумму байтов b0...b5 по модулю 2:

Sum =  bi (i = 0..5).

Байт флагов Parity содержит биты чётности байтов b0...b5Sum и собственный бит чётности. Для вычисления битов чётности необходимо для соответствующих байтов побитово сложить (по модулю два) составляющие их биты.

В случае если длина входной последовательности не кратна 6, модуль »coder" должен дополнить её незначащими нулевыми байтами (после байта с символом конца последова-тельности, соответственно).

Выходная последовательность должна состоять из пар шестнадцатеричных цифр, представляющих значения байтов закодированной последовательности. Шестнадцатеричные пары должны разделяться некоторым символом, например, символом пробела. Концом выходной последовательности должен также служить символ конца файла.

Модуль «decoder» должен считать из стандартного ввода текстовую шестнадцатеричную последовательность (которая была порождена в результате работы модуля «coder») и восстановить исходный текст. При этом «decoder» должен зафиксировать, диагностировать и по возможности исправить возникшие возможные ошибки битов закодированной последовательности. В частности, он должен диагностировать следующие ситуации:

Требования

Алгоритм не должен запоминать всю входную последовательность. Алгоритм кодирования и восстановления должен обеспечивать корректное обнаружение и устранение возможной ошибки в 1 бите на каждые 6 байт входной последовательности (или 8 байт закодированной).

Тестирование

При тестировании рекомендуется использовать перенаправление ввода-вывода операционной системы.

Запускаем модуль «coder» и направляем вывод в текстовый файл «data.txt»:

coder.exe > data.txt

Вводим текст «Hello world», завершая его комбинацией «Ctrl+Z»:

Hello world.
^Z

Открываем файл «data.txt» в текстовом редакторе и изменяем одну из шестнадцатеричных цифр последовательности так, чтобы двоичное представление этой цифры изменилось на один бит.

45 65 6C 6C 6F 20      77 6F 72 6C 64 2E       1A 00 00 00 00 00
H  e  l  l  o  _       w  o  r  l  d  .        ^Z

Меняем вторую пару 65h на 75h и сохраняем файл data.txt:

45 75 6C 6C 6F 20      77 6F 72 6C 64 2E       1A 00 00 00 00 00
H  u  l  l  o  _       w  o  r  l  d  .        ^Z

Запускаем модуль «decoder», направив ему на вход распечатанное содержимое файла «data.txt».

type data.txt | decoder.exe
Hello world.

Decoding complete. 1 data error(s) found. Total damaged bytes: data 1 sum 0 parity 0 Total repaired bytes: data 1 sum 0 parity 0 Repaired data bytes sequence numbers: #2.

Типичные ошибки