11 12
o l
7 8 9 10
e h
3 4 5 6
* w
1 2
Таблица 9. Итерация№9
Итерация №9 |
Сообщение: Hello_ wor |
Закодировнное сообщение:01101000 001100101 1001101100 01 110 01101111 100 00100000 01001110111 111 1110 01110010 |
15
o 13 14
3 4 5 6 7 8
* r
1 2
Таблица 10. Итерация№10
Итерация №10 |
Сообщение: Hello_ worl |
Закодировнное сообщение:01101000 001100101 1001101100 01 110 01101111 100 00100000 01001110111 111 1110 01110010 111 |
13 l 14
9 10 11 12
h w e - o
3 4 5 6 / 7 8
* r
1 2
Таблица 11. Итерация№11
Итерация №11 |
Сообщение: Hello_ world |
Закодировнное сообщение:01101000 001100101 1001101100 01 110 01101111 100 00100000 01001110111 111 1110 01110010 111 1100 01100100 |
l
* d - r
1 2 3 4ПРИЛОЖЕНИЕ В
Текст программы
unitForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Core;
type
TForm1 = class(TForm)
InChar: TEdit;
Panel1: TPaintBox;
Panel2: TPaintBox;
Label1: TLabel;
Label2: TLabel;
CodeTableMemo: TMemo;
MessageMemo: TMemo;
Label3: TLabel;
Label4: TLabel;
CodedMsg: TMemo;
Button1: TButton;
DecodedMsg: TMemo;
Button2: TButton;
Label5: TLabel;
procedure InCharKeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Tree, DecodeTree: PTree;
codetable: array [char] of string;
decodetable: array [char] of string;
procedure MakeCodeTable(Top: PTree);
implementation
{$R *. DFM}
procedure DrawTree(D: TPaintBox; P: Ptree; w,h: integer);
var
C: TCanvas;
procedure Draw(T: PTree; x,y,level,ofs: integer);
begin
if(T<>nil) then
begin
if(T. Left<>nil) then
begin
c. MoveTo(x,y);
c. LineTo(x-(ofs div 2),y+30);
end;
if(T. Right<>nil) then
begin
c. MoveTo(x,y);
c. LineTo(x+(ofs div 2),y+30);
end;
C. Ellipse(x-12,y-12,x+12,y+12);
if t. isleaf then if t. symbol=#0 then C. TextOut(x-4,y-25,'*') else C. TextOut(x-4,y-25,t. Symbol);
C. TextOut(x-6,y-7, inttostr(T. wiegth));
C. TextOut(x-6,y+12, inttostr(T. number));
Draw(T. Left,x-(ofs div 2),y+30,level+1,ofs div 2);
Draw(T. Right,x+(ofs div 2),y+30,level+1,ofs div 2);
end;
end;
begin
C: =D. Canvas;
C. Brush. Color: =clBtnFace;
C. FillRect(D. ClientRect);
Draw(P,w div 2,30,1,w div 2);
end;
procedure MakeDeCodeTable(Top: PTree);
procedure CT(P: PTree; code: string);
begin
if P<>nil then
begin
if (P. Wiegth>=0) and (P. IsLeaf) then
begin
decodetable [P. Symbol] : =code;
end;
if not P. IsLeaf then
begin
CT(P. Left,code+'0');
CT(P. Right,code+'1');
end;
end;
end;
begin
CT(Top,'');
end;
var
DCounter: integer;
DString: String;
DByte: byte;
DB: Boolean;
procedure AddCharToDMess(C: Char);
var
S: String;
begin
With Form1. DecodedMsg do
begin
S: =Text;
Clear;
Text: =S+C;
end;
end;
procedure Decode(BIT: Char);
var
i,j: integer;
c: char;
begin
if DB then
begin