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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2012, 21:04   #1
anastasiyaev
Новичок
Джуниор
 
Регистрация: 26.05.2012
Сообщений: 1
Подмигивание Нужно разобраться с кодом программы!

Имеется сообщение длинной 10000 цифр, представленное в виде текстового файла. Символы сообщения составляют ансамбль {X,P(X)}. Соседние элементы сообщения статистически связаны между собой.

Требуется определить следующие характеристики информационного массива:
1.Вероятности появления символов в сообщении p(x) и записать их в виде ансамбля {X,P(X)};
2.Вычислить энтропию ансамбля H(X) и определить количество информации в сообщении без учета статистической связи между соседними элементами.
3.Рассчитать матрицу совместных p(x,y) и условных p(y/x) вероятностей, а также совместную H(X,Y) и условную H(Y/X) энтропии.
4.Вычислить количество информации в сообщении с учетом взаимной связи между элементами сообщения.
5.Определить коэффициент избыточности сообщения в обоих случаях (при наличии и отсутствии связи).

Код:
unit LR1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    pp: TOpenDialog;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
       procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  a:array[0..255]of real;
  aa:array[0..255]of real;
  m,mm:array[0..255,0..255]of real;
    c:File of byte;
  b,bb:byte;
  i,j:integer;
  s,ss,x,xx,en,k,ki:real;
implementation
{$R *.dfm}
 procedure TForm1.Button1Click(Sender: TObject);
begin
 for i:=0 to 255 do begin
  for j:=0 to 255 do begin
      m[i,j]:=0;
      mm[i,j]:=0;               end;
      a[i]:=0;
      aa[i]:=0;
end;
 if pp.Execute then begin
    AssignFile(c,pp.FileName);
    reset(c);

while not EoF(c) do begin
read(c,b);
a[b]:=a[b]+1;
aa[b]:=a[b];
end;
 en:=0;
 s:=0;
 for i:=0 to 255 do begin
 aa[i]:=aa[i]/10000;
  s:=s+aa[i];
 if aa[i]<>0 then
  en:=en+aa[i]*(ln(aa[i])/ln(2));
 end;
 Memo1.lines.Add('сумма вероятностей= '+FloatToStr(s));
 Memo1.lines.Add('энтропия источника= '+FloatToStr(-en));
 end;
 reset(c);
 read(c,b);
 while not EoF(c) do begin
 read(c,bb);
m[b,bb]:=m[b,bb]+1;
mm[b,bb]:=m[b,bb];
b:=bb;
end;
 s:=0;
 xx:=0;
  x:=0;
 for i:=0 to 255 do begin
 for j:=0 to 255 do begin
  m[i,j]:=m[i,j]/9999;
  s:=s+m[i,j];
    if m[i,j]<>0 then begin
  x:=x+m[i,j]*(ln(m[i,j])/ln(2));
  end;
  if a[i]<>0 then
  mm[i,j]:=mm[i,j]/a[i];
  ss:=ss+mm[i,j];
 end;
  xx:=xx+x;
  x:=0;
 
 end;

 memo1.Lines.Add('сумма совместных вероятностей пар= '+floatToStr(s));
 memo1.Lines.Add('сумма условных вероятностей пар= '+floatToStr(ss));
 s:=0;
 ss:=0;

 for i:=0 to 255 do begin
 for j:=0 to 255 do begin

 if mm[i,j]<>0 then
  s:=s+mm[i,j]*(ln(mm[i,j])/ln(2));

   end;
   s:=s*aa[i];
   ss:=ss+s;
    s:=0;
 end;
   memo1.Lines.Add('условная энтропия= '+floatToStr(-ss));
 memo1.Lines.Add('совместная энтропия= '+floatToStr(-xx));
 x:=-en-ss;
  memo1.Lines.Add('проверка '+floatToStr(x));
   k:=(8-en)/8;
   ki:=10000*(-en);
   memo1.Lines.Add('количество информации без учета связи = '+floatToStr(ki));
   memo1.Lines.Add('коэффициент избыточности без учета связи = '+floatToStr(k));
   k:=(8-ss)/8;
   ki:=10000*(-ss);
   memo1.Lines.Add('количество информации c учетом связи = '+floatToStr(ki));
   memo1.Lines.Add('коэффициент избыточности с учетом связи = '+floatToStr(k));
 end;
 procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Clear;
end;
end.
2я часть не поместилась.
Всё задание здесь:
лаба1.doc

Последний раз редактировалось ACE Valery; 26.05.2012 в 22:11.
anastasiyaev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разобраться с кодом iris_ka Помощь студентам 0 16.05.2012 17:19
Нужно разобраться с кодом написанным на Object Pascal в среде Delphi 7.0 anchuta Помощь студентам 10 15.05.2011 21:17
нужно разобраться с кодом Владимир31 Общие вопросы C/C++ 3 28.03.2011 07:36
Нужно разобраться в коде программы на Си! Юлия26 Помощь студентам 0 14.12.2010 10:42
Нужно разобраться с программным кодом. DimaSSololo Помощь студентам 0 27.05.2010 00:00