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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2011, 20:46   #1
videolord
Пользователь
 
Аватар для videolord
 
Регистрация: 23.02.2011
Сообщений: 28
Смущение Как можно получить кодовое слово

Привет всем!!! Как можно разделить вероятности на одинаковые группы и получить кодовое слово
(Звучит странно но нигде не нашел нормальную реализацию этого алгорима <Код Шеннона-Фано>)
1283807535_2fgj.gif
и еще фотка
1.bmp

Последний раз редактировалось videolord; 27.05.2011 в 14:22.
videolord вне форума Ответить с цитированием
Старый 27.05.2011, 21:23   #2
videolord
Пользователь
 
Аватар для videolord
 
Регистрация: 23.02.2011
Сообщений: 28
По умолчанию Как можно получить кодовое слово

помогите пожалуйста исправить баг или просто перепутал что ли,
но выводит как то некорректно
answer.gif
а должен выводить такие значения
1.gif
код на Delphi

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
 const k=6;
 type
 mass=array [1..k] of real;
 var p,a: mass;
  i,x: integer;
 code: array [1..k] of string[20];
procedure shannona(b:mass);
 procedure divide(var nS:integer; n1,n2:integer);
 var
 s,s1,s2: real;
 i:integer;
 begin
 s:=0;
 for i:=n1 to n2 do s:=s+a[i];
 s1:=0; s2:=0;
 i:=n1-1;
 repeat
 inc(i);
 s1:=s1+a[i];
 s2:=s1+a[i+1];
 until abs(s/2-s1)<abs(s/2-s2);
 nS:=i;
 for x:=n1 to nS do
 if (s/2-s1)>=0 then code[x]:=code[x]+'1'
 else code[x]:=code[x]+'0';
 for x:=nS+1 to n2 do
 if (s/2-s1)<0 then code[x]:=code[x]+'1'
 else code[x]:=code[x]+'0';
 end;
 var
 tmp: real;
 j,n1,n2,nS: integer;
 begin
 for i:=1 to k do code[i]:='';
 for i:=1 to k do a[i]:=b[i];
 for i:=1 to k do
 for j:=k downto(i+1) do
 if a[i]<a[j]
 then
 begin
 tmp:=a[i];
 a[i]:=a[j];
 a[j]:=tmp;
 end;
 j:=1;
 repeat
 divide(nS,j,k);
 n1:=nS;
 while (nS-j)>0 do divide(nS,j,nS);
 j:=nS+1;
 n2:=n1;
 while (n1-j)>0 do divide(n1,j,n1);
 j:=n2+1;
 until j>(k-1);
 end;
begin
p[1]:=0.25;
p[2]:=0.25;
p[3]:=0.15;
p[4]:=0.15;
p[5]:=0.12;
p[6]:=0.1;
shannona(p);
for i:=1 to k do
begin
write('p[',i:2,']  ');
 write(p[i]:0:3,' ');
 write(code[i]:5,' ');
writeln('');
end;
readln;
end.

Последний раз редактировалось videolord; 28.05.2011 в 14:31.
videolord вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно получить структуру TOOLINFO тултипа (Tooltips_class32) Narutо Общие вопросы Delphi 9 30.12.2010 17:24
Как получить слово вокруг сепаратора HellMercenariess Общие вопросы Delphi 10 22.10.2010 13:18
Делфи. Функция, возвращающая букву системного диска(раздела). Или как ее можно получить по-другому? быдлокодер Помощь студентам 2 08.06.2010 23:26
Как можно получить координаты мыши в нутри объекта(в моём случаии в диве) killer12rus JavaScript, Ajax 2 06.07.2009 19:57