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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2009, 20:45   #1
didar_
Пользователь
 
Регистрация: 10.02.2009
Сообщений: 21
По умолчанию Построения оптимального кода. По формуле Хаффмена

мне даны z[1], z[2], z[3], ..., z[8]. (вероятности). Нужно решить эту задачау с помощью формулы Хаффмана

Последний раз редактировалось didar_; 19.04.2009 в 20:53.
didar_ вне форума Ответить с цитированием
Старый 20.04.2009, 09:58   #2
didar_
Пользователь
 
Регистрация: 10.02.2009
Сообщений: 21
По умолчанию

Если кто-то прочел, помогите составить программу, плз
didar_ вне форума Ответить с цитированием
Старый 22.04.2009, 19:09   #3
didar_
Пользователь
 
Регистрация: 10.02.2009
Сообщений: 21
По умолчанию Помогите плз!

вот составил программу. Но ее ответ не правильный
где ошибка?

program qwerty;
const n=10;
type mas=array[1..n] of real;
var a,at,at1:mas;
b,v:array[1..n,1..n] of real;
i,j,t,k:integer;
s,s1,h,kh,ke:real;
str:array[1..n] of string[10];
x,x1:string;
procedure sortirovka(var r:mas);
var i,j:integer;
m:real;
begin
for i:=1 to n do
for j:=i+1 to n do
if (a[i]<a[j]) then
begin
m:=a[j]; a[j]:=a[i];
a[i]:=m;
end;
end;
procedure zero(var rr:mas);
var i:integer;
begin
for i:=1 to n do
a[i]:=0;
end;
begin
for i:=1 to n do
begin
write('a',i);
write(' ');
read(a[i]);end;
for i:=1 to n do
begin
at[i]:=a[i];
at1[i]:=a[i];
end;
sortirovka(a);
for j:=1 to 1 do
for i:=1 to n do
b[i,j]:=a[i];
zero(a);
for j:=2 to n do
begin
a[n-j+1]:=b[n-j+2,j-1]+b[n-j+1,j-1];
for i:=1 to n-j do
a[i]:=b[i,j-1];
sortirovka(a);
for i:=1 to n do
b[i,j]:=a[i];
zero(a);
end;
for j:=n-1 downto 1 do
for i:=1 to n-j do
begin
if ((j mod 2)=0) and ((i mod 2)=0) then v[i,j]:=1;
if ((j mod 2)<>0) and ((i mod 2)<>0) then v[i,j]:=1;
end;
begin
for k:=1 to n do
for j:=2 to n-1 do
for t:=n-j+1 downto 1 do
for i:=n-j+2 downto 1 do
if at[k]+b[i,j-1]=b[t,j] then
if at[k]>=b[i,j-1] then str[k]:='1'
else str[k]:='0';
end;
begin
for k:=1 to n do
for j:=2 to n-1 do
for t:=n-j+1 downto 1 do
for i:=n-j+2 downto 1 do
if at[k]+b[i,j-1]=b[t,j]
then begin if v[t,j]=1 then str[k]:=str[k]+'1'
else str[k]:=str[k]+'0';
at[k]:=b[t,j]; end;
end;
str[10]:='1';
for i:=1 to n do
begin
x1:=str[i];
for j:=1 to (length(x1) div 2) do
begin
x[j]:=x1[j]; x1[j]:=x1[length(x1)-j+1];
x1[length(x1)-j+1]:=x[j];
end;
str[i]:=x1;
delete(x1,1,10);
end;
for i:=1 to n do
a[i]:=length(str[i]);
s:=0;
for i:=1 to n do
s:=s+at1[i]*a[i];
h:=ln(10)/ln(2);
s1:=0;
for i:=1 to n do
s1:=s1+at1[i]*ln(at1[i])/ln(2);
s1:=-s1;
ke:=s1/s;
kh:=h/s;
writeln('b:');
for i:=1 to n do
begin
for j:=1 to n do
begin
write(b[i,j]:0:3);
write(' ');end;
writeln;
end;
writeln('v:');
for i:=1 to n do
begin
for j:=1 to n do
begin write(v[i,j]:0:3);
write(' '); end;
writeln;
end;
for i:=1 to n do
begin
write('a',i);
write('-');
writeln(str[i]);
end;
writeln('kh=',kh:0:3);
writeln('ke=',ke:0:3);
end.
didar_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сжатие Хаффмена zgest Общие вопросы C/C++ 1 23.03.2009 23:23
Кодирование методом Хаффмена(создание 2-ичьного файла) Руслантус Общие вопросы C/C++ 0 04.12.2008 16:58
C++ Метод Хаффмена. Очень нужно ! MTBiker Фриланс 2 11.05.2008 21:56
Нахождение оптимального маршрута rednax Помощь студентам 6 08.06.2007 19:21