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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2022, 19:42   #1
Shadrina
Новичок
Джуниор
 
Регистрация: 25.06.2022
Сообщений: 1
По умолчанию Алгоритм Хаффмана на Pascal

Помогите исправить ошибку
program Huffman;
var n,i,j,k: integer;
represent: string;
a: char;
alphabet: array [1..256] of char;
probability: array [1..256] of integer;
kod: array [1..256] of string[10];
{ Обозначения, как в программе для алгоритма Фано:
represent – репрезентативное слово источника сообщений;
alphabet - алфавит источника;
probability – набор вероятностей для букв алфавита, представлен
абсолютными частотами;
kod – набор элементарных кодов }
procedure huffman_active;
var i,j,s:integer;
raz: array [1..256] of integer;
a: string;
begin
kod[1]:='0';
kod[2]:='1';
if n>2 then
begin
for i:=n downto 3 do
begin
s:=probability[i]+probability[i-1];
j:=i-1;
repeat
probability[j]:=probability[j-1];
j:=j-1
until (s<=probability[j-1]) or (j=1);
probability[j]:=s;
raz[i]:=j
end;
for i:=2 to n do
begin
a:=kod[raz[i]];
for j:=raz[i]+1 to i do kod[j-1]:=kod[j];
kod[i-1]:=a+'0';
kod[i]:=a+'1';
writeln;
end;
end;
end;
{ Описанная процедура – основная часть программы. Здесь реализуются
оба этапа алгоритма Хаффмена }
begin
for i:=1 to 256 do kod[i]:='';
write('Vvedite text: ');
readln(represent);
n:=0;
for i:=1 to length(represent) do
begin
k:=0;
for j:=1 to n do if represent[i]=alphabet[j] then k:=j;
if k=0
then
begin
n:=n+1;
alphabet[n]:=represent[i];
probability[n]:=1
end
else probability[k]:=probability[k]+1;
end;
{ Производится ввод репрезентативного слова, заполняется алфавит,
вычисляются частоты }
for i:=1 to n do
for j:=i-1 downto 1 do
if probability[j]<probability[j+1]
then
begin
k:=probability[j];
probability[j]:=probability[j+1];
probability[j+1]:=k;
a:=alphabet[j];
alphabet[j]:=alphabet[j+1];
alphabet[j+1]:=a
end;
{ Перед применением алгоритма массив вероятностей упорядочивается по
убыванию, как этого требует метод }
huffman_active;
for i:=1 to length(represent) do
begin
for j:=1 to n do if represent[i]=alphabet[j] then k:=j;
write(kod[k]);
end;
writeln;
{ В конце работы программы выводятся закодированное репрезентативное
слово (см. выше) и таблица кодов (см. ниже) }
for i:=1 to n do writeln(alphabet[i],' ', kod[i]);
end.
Shadrina вне форума Ответить с цитированием
Старый 25.06.2022, 21:50   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,545
По умолчанию

Обычно люди перед постом в форум читают правилп. Из раздела НАСТОЯТЕЛЬНО РЕКОМЕНДУЕМ им становится ясно, что прога оформляется с применением форматирования и тегов CODE. Иначе какой мазохист захочет читать эту простыню - я не знаю. И если просят помочь найти ошибку - пишут, в чём она заключается.
digitalis вне форума Ответить с цитированием
Старый 25.06.2022, 22:08   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Да уж. Это полотенце не легко прочитать.
Попробуйте поискать здесь
Код:
for i := n downto 3 do
begin
  s := probability[i] + probability[i - 1];
  j := i - 1;
  repeat
    probability[j] := probability[j - 1];
    j := j - 1
  until (s <= probability[j - 1]) or (j = 1);
  probability[j] := s;
  raz[i] := j
end;
macomics вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(Pascal ABC) Алгоритм Хаффмана: создание дерева и кодов символов Abdelliamo Помощь студентам 1 14.12.2016 10:22
Алгоритм сжатия Хаффмана (найти ошибки), Pascal WestCoast Фриланс 0 16.01.2014 20:28
Алгоритм Хаффмана [BeNdeR] Общие вопросы Delphi 0 02.03.2012 20:48
Алгоритм Хаффмана [BeNdeR] Мультимедиа в Delphi 12 02.03.2012 20:34
Алгоритм Хаффмана 0479 Помощь студентам 1 15.09.2010 11:53