- •Лекции 26-27: Объекты и объектно-ориентированное программирование.
- •1.Принципы объектно-ориентированного программирования.
- •2. Концепция объекта в Турбо Паскале.
- •3. Свойства наследования и полиморфизма объектов.
- •4. Пример программы с использованием объектов.
- •Interface
- •Implementation
- •5. Понятие о динамических объектах.
- •6. Расширенное использование процедуры new.
- •7. Освобождение хип-памяти от динамических объектов.
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; {объекты для демонстрации кода Хэмминга}