Циклические коды

нет

да

Конец

§ 6. Разработка текста программы

Для представления информационного слова в памяти используется

массив. В состав программы входит основная программа и два модуля,

реализующие алгоритм кодирования и декодирования информационных слов и диалога с пользователем соответственно.

Program Cyclic_Code;

Uses

Crt,_CC31,_Serv;

Var

m,mm:Move_code;

p:Polinom;

r:Rest;

i,Mainflag,From,Error:integer;

Switch:byte;

Key:boolean;

begin

Repeat

Key:=true;

TextColor(11);

TextBackGround(7);

Clrscr;

SetWindow(24,10,45,14,2,' Главное меню ');

Switch:=GetMainMenuChoice;

case Switch of

1:begin

About;

Readln;

Key:=False;

end;

2: begin

TextColor(0);

ClrScr;

SetWindow(25,10,40,13,1,' Образовать ');

Switch:=GetSubMenuChoice;

case Switch of

1:begin

TextBackGround(0);

TextColor(15);

ClrScr;

SetWindow(1,1,79,24,2,' Демонстрация');

TextColor(14);

GotoXY(2,2);

Init(m,p,r,MainFlag);

Write(‘Информационный полином ');

TextColor(2);

for i:=n downto 0 do

begin

if(i<n-n1+1)then Textcolor(9);

Write(m[i]);

end;

TextColor(14);

GotoXY(2,3);

Write('Образующий полином ');

TextColor(13);

for i:=n1 downto 0 do

Write(p[i]);

TextColor(14);

GotoXY(2,4);

Write('Сложение по модулю 2 (F(x)+P(x)): ');

FxPx(m);

TextColor(9);

for i:=n downto 0 do

begin

if(i<n1)then TextColor(2);

Write(m[i]);

end;

TextColor(14);

GotoXY(2,5);

Write('Остаток: ');

Divizion(m,r,p,Mainflag);

TextColor(11);

for i:=n1 downto Mainflag do

Write(r[i]);

GotoXY(2,6);

TextColor(14);

Write('Передаваемый полином: ');

BildMoveCode(m,r,Mainflag);

TextColor(9);

for i:=n downto 0 do

begin

if(i<n1) then TextColor(11);

Write(m[i]);

end;

GotoXY(2,7);

TextColor(14);

Write('Произошла ошибка . ');

MakeError(m,Error);

TextColor(9);

for i:=n downto 0 do

begin

if(i=Error)then

TextColor(12)

else

TextColor(9);

write(m[i]);

end;

GotoXY(2,8);

TextColor(14);

Write('Ошибка исправлена! ');

TextColor(9);

Correction(m,p,r);

for i:=n downto 0 do

begin

if(i=Error)then

TextColor(10)

else

TextColor(9);

write(m[i]);

end;

TextColor(14);

GotoXY(2,9);

Write('Исходный полином: ');

Decoder(m);

TextColor(2);

for i:=n downto 0 do

begin

if(i<n-n1+1)then Textcolor(9);

Write(m[i]);

end;

Key:=false;

end;

2:begin

TextBackGround(0);

TextColor(15);

ClrScr;

SetWindow(1,1,79,24,2,'Демонстрация');

TextColor(14);

GotoXY(2,2);

Init(m,p,r,MainFlag);

Write('Информационный полином: ');

TextColor(2);

for i:=n downto 0 do

begin

if(i<n-n1+1)then Textcolor(9);

Write(m[i]);

end;

TextColor(14);

GotoXY(2,3);

Write('Образующий полином: ');

TextColor(13);

for i:=n1 downto 0 do

Write(p[i]);

TextColor(14);

GotoXY(2,4);

Write('Результат умножения: ');

BildMoveCodeMultiplication(m);

TextColor(9);

for i:=n downto 0 do

Write(m[i]);

GotoXY(2,5);

TextColor(14);

Write('Произошла ошибка . ');

MakeError(m,Error);

TextColor(9);

for i:=n downto 0 do

begin

if(i=Error)then

TextColor(12)

else

TextColor(9);

write(m[i]);

end;

GotoXY(2,6);

TextColor(14);

Write('Ошибка исправлена ! ');

TextColor(9);

Correction(m,p,r);

for i:=n downto 0 do

begin

if(i=Error)then

TextColor(10)

else

TextColor(9);

write(m[i]);

end;

Key:=false;

end;

end;

TextColor(14);

GotoXY(2,22);

Write('Нажмите любую клавишу .');

Readln;

end;

3:begin

ClrScr;

GotoXY(1,24);

TextColor(14);

Writeln('Работа программы завершена .');

Readln;

TextBackGround(0);

TextColor(15);

ClrScr;

Key:=true;

end;

end;

Until Key;

end.

§ 7 .Результаты работы программы

Результат работы программы при образовании кода добавлением остатка

Демонстрация

Информационный полином: 0000011010111110011110110110110

Образующий полином: 111101

Cложениe по модулю 2 (F(x)+P(x)): 1101011111001111011011011000000

Остаток: 010101

Передаваемый полином: 1101011111001111011011011010101

Произошла ошибка . 1101011111001110011011011010101

Ошибка исправлена! 1101011111001111011011011010101

Исходный полином: 0000011010111110011110110110110

Нажмите любую клавишу .

Результат работы при образовании кода умножением

Демонстрация

Информационный полином: 0000001010110000011111010001011

Образующий полином: 111101

Результат умножения: 0110000011111010000100100101111

Произошла ошибка . 0110000011111010000100100101101

Ошибка исправлена! 0110000011111010000100100101111

Нажмите любую клавишу .

Выводы:

Данная программа кодирует сообщения используя циклический код.

При этом она иммитирует работу канала для передачи информации.

При возникновении исключительных ситуаций,когда информационное слово по каким-либо причинам раскодировать не удаётся, программа повторяет запрос на пересылку данных, как это делается в реальных ситуациях подобного рода.

Кроме этого, программа случайным образом, "при прохождении

информационного слова через канал" допускает в слове однократную ошбку, затем исправляет ее, декодирует информационное слово и передаёт результат пользователю.

Литература

1. “Кодирование информации (двоичные коды)”.Березюк Н.Т.,

Андрущенко А.Г., Мощицкий С.С. и др. Харьков,издательское объеди-

нение “Вища школа”,1978. 252 с.

2. “ Программирование в среде Turbo Pascal “ . Марченко А.И., Марченко

Л.А. Москва,“Бином Универсал”.Киев,”Юниор”,1997.495 с.

Приложение № 1

Процедуры и функции модуля _сс31.

Unit _CC31;

Interface

Uses

Crt;

Const

n=30; { Информация+код }

n1=5; { Размер контрольных разрядов }

Type

Move_code=array[0 n] of byte; { Передаваемый полином F(x) }


Страница: