Циклические кодыРефераты >> Программирование и компьютеры >> Циклические коды
нет
да
Конец
§ 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) }