Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 26.27.doc
Скачиваний:
1
Добавлен:
11.07.2019
Размер:
88.58 Кб
Скачать

4. Пример программы с использованием объектов.

Программа с использованием объектов на Турбо Паскале построена как демонстрация работы кода с исправлением ошибки в одном символе сообщения (кода Хэмминга). В этой программе использованы два модуля: модуль fbyte (аналогичный рассмотренному ранее модулю f_byte) и модуль cod_Hem, содержащий объекты: символ и строка символов (Tsymb и Tstr_symb). Программа имеет следующий вид:

program Hamming;{демонстрация кода Хэмминга}

uses CRT,Cod_Hem, Fbyte;

var msg:string[22]; {исходная строка-сообщение}

source:Tstr_symb;{объект- строка символов вывода}

r:byte;{позиция искажённого символа}

er_msg:string;{строка, переданная по каналу}

s1,s2:string;{подстроки er_msg}

X,D1,D2:byte;{контроль принятого сообщения}

s:string;{строка-Nпоследнего символа}

symb:char;{исправленный символ}

BEGIN TextColor(Yellow);TextBackground(white);ClrScr;writeln('Исходная строка:');

gotoXY(5,2);read(msg); gotoXY(5,2);with source do

begin {Вывод исходного сообщения} if length(msg)<10 then

repeat insert(' ',msg,1) until length(msg)=10;

put_str(msg,green,100);gotoXY(1,3);

{Кодирование исходного сообщения}

writeln('Кодирование:');readkey;gotoXY(5,4);

put_bstr(msg,brown,100);gotoXY(5,7);

codK1(msg);write(msgK1);gotoXY(Xc,Yc);

put_bsym(chr(K1),magenta);gotoXY(5,8);

codK2(msg);write(msgK2);gotoXY(Xc,Yc);

put_bsym(chr(K2),magenta);delay(1000);

{Передача сообщения и моделирование ошибки}

gotoXY(1,9);write('Передача по каналу с шумом:');readkey;

gotoXY(5,10);er_msg:=msg+chr(K1)+chr(K2);randomize;

r:=random(length(er_msg)+1);if r<>0 then

begin if r<>1 then s1:=copy(er_msg,1,r-1) else s1:='';

er_msg:=copy(er_msg,r+1,length(er_msg));

end else s1:='';

if r<>0 then begin if r<>1 then put_bstr(s1,cyan,100);gen_sym(red);

delay(1000);change_c(cyan);s1:=s1+c;

end; if er_msg<>'' then put_bstr(er_msg,cyan,100);

delay(1000);gotoXY(1,13);

{Приём сообщения и контроль ошибок}

writeln('Принятое сообщение:');readkey;gotoXY(5,whereY);

er_msg:=s1+er_msg;put_str(er_msg,blue,100);

D2:=ord(er_msg[length(er_msg)]);gotoXY(2,16);

er_msg:=copy(er_msg,1,length(er_msg)-1);

codK1(er_msg);D1:=K1;delete(msgK1,length(msgK1)-10,6);

msgK1:='D1='+msgK1;write(msgK1);gotoXY(Xc-3,Yc+1);write('D1');

gotoXY(Xc-3,Yc+2);put_bsym(chr(D1),red);delay(500);

gotoXY(2,17);er_msg:=copy(er_msg,1,length(er_msg)-1);

codK2(er_msg);D2:=fplus(K2,D2);msgK2:='D2='+msgK2;

delete(msgK2,length(msgK2)-9,10);str(length(er_msg),s);

msgK2:=msgK2+'+C'+s;write(msgK2);gotoXY(Xc,Yc-1);

write('D2');gotoXY(Xc,Yc);put_bsym(chr(D2),red);

gotoXY(2,Yc+2);if(D1=0)and(D2=0)then

put_str('Ошибок нет',green,100);

if(D1=0)and(D2<>0)then put_str('Ошибка в K2',red,100);

if(D1<>0)and(D2=0)then put_str('Ошибка в K1',red,100);

if(D1<>0)and(D2<>0)then

begin put_str('Ошибка!',red,100);gotoXY(2,Yc+1);

{Вычисление ошибочной позиции и исправление ошибки}

write('Коррекция ошибки:');readkey;fequat(D1,D2,X,r);

writeln(' D1*X=D2; r=L-log2_(X)+1; L-длина сообщения ');

write(' Вес ошибки X= ');put_str(b_str3(X),red,100);

write(' Номер ошибочной позиции r= ');r:=length(msg)-r+1;

put_str(b_str3(r),red,100);gotoXY(2,Yc+1);

writeln('Конечное сообщение:(исправление C',r,'+D1)');

gotoXY(5,Yc+2);put_bstr(copy(er_msg,1,r-1),blue,100);

put_bsym(er_msg[r],red);delay(1000);gotoXY(Xc-3,Yc);

symb:=chr(fplus(ord(er_msg[r]),D1));

put_bsym(symb,blue);er_msg[r]:=symb;

put_bstr(copy(er_msg,r+1,length(er_msg)),blue,100);

gotoXY(5,Yc+3);put_str(er_msg,green,100);

end else begin writeln;

writeln(' Конечное сообщение:');gotoXY(5,whereY);

put_str(er_msg,green,100) end;

end;readkey

END {Hamming}.

Модуль, используемый в программе Hamming:

UNIT cod_Hem; {объекты для демонстрации кода Хэмминга}