Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2015, 14:45   #1
Олямбан
Пользователь
 
Регистрация: 21.06.2015
Сообщений: 14
По умолчанию кодировка Шеннон, Фано, Хафман

Здравствуйте) помогите пожалуйста, на основе этой сортировки нужно закодировать методом Шенонна, Фано или Хафмана.

Код:
var
  Form1: TForm1;
  b,c:integer;
implementation

{$R *.dfm}
procedure clear;
begin
Form1.StringGrid1.Cols[1].Clear;
Form1.StringGrid1.Cols[2].Clear;
Form1.StringGrid1.RowCount:=1;
b:=0;
c:=0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
    k:string;
    a:char;
begin
clear;
StringGrid1.Cells[0,c]:='Символ';
StringGrid1.Cells[1,c]:='Количество';
k:=AnsiUpperCase(Edit1.Text);
c:=0;
while Length(k)<>0 do
if k[1]<>' ' then
 begin
  inc(c);
  a:=k[1];
  b:=1;
  for i := 2 to Length(k) do
  if k[i]=a then inc(b);
  k:=StringReplace(k,a,'',
  [rfReplaceAll]);
  StringGrid1.Cells[0,c]:='"'+a+'"';
  StringGrid1.Cells[1,c]:=IntToStr(b);
 end
else delete(k,1,1);
StringGrid1.RowCount:=c+1;
with StringGrid1 do
for i:=1 to  rowcount-2 do
for j:=i+1 to rowcount-1 do
if cells[1,i]<cells[1,j] then
 begin
  k:=rows[i].Text;
  rows[i].Text:=rows[j].Text;
  rows[j].Text:=k;
 end;
end;

end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 23.06.2015 в 15:09.
Олямбан вне форума Ответить с цитированием
Старый 23.06.2015, 15:06   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
на основе этой сортировки нужно закодировать методом Шенонна, Фано или Хафмана.
закодировать ЧТО?!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 23.06.2015, 15:12   #3
Олямбан
Пользователь
 
Регистрация: 21.06.2015
Сообщений: 14
По умолчанию

Закодировать текст, который мы введем. этот код сортировки букв. Например, вводим текст Алексей, он выводит повторения букв по убыванию, е-2 , а-1 раз, л-1 раз, к-1раз, с-1 раз, й-1 раз, вот эти буквы нужно закодировать Шеноном, Хафманом или Фано
Олямбан вне форума Ответить с цитированием
Старый 23.06.2015, 15:19   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А вываленный кусок кода чо делает?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 23.06.2015, 15:28   #5
Олямбан
Пользователь
 
Регистрация: 21.06.2015
Сообщений: 14
По умолчанию

Он и делает, то что я написала, считает количество повторений и сортирует по убыванию количество повторений.

А мне нужно, что бы выводилась вероятность встречающегося символа. Могу скинуть программу реализованную с этими кодами. Просто мне нужно именно на основе моей сортировки применить фано , шенона или хафмана.
Олямбан вне форума Ответить с цитированием
Старый 23.06.2015, 15:29   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Он и делает, то что я написала, считает количество повторений и сортирует по убыванию количество повторений.
А зачем он здесь? Ведь тебе надо закодировать какую-то строку, и не важно, как и где она формируется/сортируется. Или я чего-то не понимаю?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 23.06.2015, 15:32   #7
Олямбан
Пользователь
 
Регистрация: 21.06.2015
Сообщений: 14
По умолчанию

Сейчас скину пример кода, и ты поймешь)
Код:
unit form_main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ToolWin, ComCtrls, Grids, ExtCtrls, mat_code, XPMan;

type
  TFormMain = class(TForm)
    CoolBar1: TCoolBar;
    Panel6: TPanel;
    Label3: TLabel;
    edText: TEdit;
    memAnalyze: TMemo;
    Panel2: TPanel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    sgShannonFano: TStringGrid;
    TabSheet2: TTabSheet;
    Label1: TLabel;
    memShannonFano: TMemo;
    sgHuffman: TStringGrid;
    memHuffman: TMemo;
    XPManifest1: TXPManifest;
    Panel1: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure edTextChange(Sender: TObject);
    procedure memAnalyzeChange(Sender: TObject);
  private
    FModeler: TMatModeler;
    FCoderShannonFano: TMatCoder;
    FCoderHuffman: TMatCoder;
    procedure CreateCoderInfo(Coder: TMatCoder; StringGrid: TStringGrid; Memo: TMemo);
  end;

var
  FormMain: TFormMain;

implementation
uses math;

{$R *.dfm}

procedure TFormMain.FormCreate(Sender: TObject);
begin
  FModeler := TMatModeler.Create;
  FCoderShannonFano := TMatCoderShannonFano.Create(FModeler);
  FCoderHuffman := TMatCoderHuffman.Create(FModeler);
  edText.OnChange(Self);
end;

procedure TFormMain.FormDestroy(Sender: TObject);
begin
  FModeler.Free;
end;

procedure TFormMain.edTextChange(Sender: TObject);
begin
  FModeler.Execute(edText.Text);
  FCoderShannonFano.Execute;
  FCoderHuffman.Execute;
  with memAnalyze, Lines, FModeler do
  begin
    Clear;
    Add(Format('Длина сообщения (символов): %d', [Length(FModeler.Text)]));
    Add(Format('Кол-во символов алфавита: %d',[CharsPerTable]));
    Add(Format('Энтропия сообщения: %.5f', [EntropyPerText]));
    Add(Format('Средняя энтропия символа: %.5f',[EntropyPerChar]));
    Add(Format('Длина символа при равномерном кодировании (бит): %d', [BitsPerChar]));
    Add(Format('Длина сообщения при равномерном кодировании (бит): %d', [BitsPerText]));
    Add(Format('Абсолютная избыточность в представлении сообщения: %.5f', [RedundancePerText]));
    Add(Format('Средняя абсолютная избыточность в представлении символа: %.5f',[RedundancePerChar]));
  end;
  CreateCoderInfo(FCoderShannonFano, sgShannonFano, memShannonFano);
  CreateCoderInfo(FCoderHuffman, sgHuffman, memHuffman);
end;

procedure TFormMain.CreateCoderInfo(Coder: TMatCoder; StringGrid: TStringGrid; Memo: TMemo);
var rc, k, i, ci: Integer;
    CharItem: PMatCharTableItem;
    CodeItem: PMatCodeTableItem;
begin
  with StringGrid, Coder do
  begin
    rc := FModeler.CharsPerTable + 1;
    if rc = 1 then
    begin
       Inc(rc);
       Rows[1].Clear;
    end;

    RowCount := rc;
    Cells[0, 0] := 'Символ';
    Cells[1, 0] := 'Вероятность';
    Cells[2, 0] := 'Энтропия';
    Cells[3, 0] := 'Избыток';
    Cells[4, 0] := 'Код';

    for k := 0 to CodesPerTable-1 do
    begin
      ci := CodeIndex[k];
      CodeItem := CodeTable[ci];
      CharItem := FModeler.CharTable[CodeItem.CharItem.Value];

      Cells[0, k+1] := Format('"%s"', [Chr(CodeItem.CharItem.Value)]);
      Cells[1, k+1] := Format('%.5f', [CharItem.Probability]);
      Cells[2, k+1] := Format('%.5f', [CharItem.Entropy]);
      Cells[3, k+1] := Format('%5.2f', [CodeItem.Redundance]);
      Cells[4, k+1] := Format('%s', [CodeItem.Code]);
      for i := 1 to Length(CodeItem.Code) do Cells[4 + i, k+1] := CodeItem.Code[i];
      for i := Length(CodeItem.Code) + 1 to 32 do Cells[4 + i, k+1] := '';
    end;
  end;
  with Memo, Lines, Coder do
  begin
    Clear;
    Add(Format('Средняя длина кода: %.5f',[AvgCodeLength]));
    Add(Format('Коэффициент относительной эффективности: %.5f',[RatioEffective]));
    Add(Format('Коэффициент сжатия кода: %.5f',[RatioCompression]));
    Add(Format('Длина сжатого сообщения (бит): %d', [BitsPerText]));
  end;
end;

procedure TFormMain.memAnalyzeChange(Sender: TObject);
begin

end;

end.
Олямбан вне форума Ответить с цитированием
Старый 23.06.2015, 15:36   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сейчас скину пример кода, и ты поймешь)
Я не читаю чужой код, в котором больше 5 строк. Здоровье дороже.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 23.06.2015, 15:37   #9
Олямбан
Пользователь
 
Регистрация: 21.06.2015
Сообщений: 14
По умолчанию

Блин, просто бы посмотрел что именно мне нужно., как работает. не могу просто картинку тебе кинуть
Олямбан вне форума Ответить с цитированием
Старый 23.06.2015, 15:45   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
не могу просто картинку тебе кинуть
И когда это стало моей проблемой?
Не можешь грамотно сформулировать задачу - ступай себе лесом.
Ничего личного, но я так же и живых людей-заказчиков на работе разворачиваю. Не можешь объяснить исполнителю, чего ты от него хочешь - ищи другого исполнителя.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хафман, декодер (есть код) freekyn Помощь студентам 1 17.05.2017 13:37
Шеннон-Фэно Рустам_IMAN Паскаль, Turbo Pascal, PascalABC.NET 0 15.03.2012 22:13
Перевести в С# из С++ (Метод Шеннон Фано) ~Леди~ C# (си шарп) 3 16.12.2011 08:54
метод Шеннона-Фано Вечно грустная... Помощь студентам 3 11.11.2011 11:41
Алгоритм Фано(Pascal) makc101 Помощь студентам 0 11.12.2010 12:19