|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.06.2022, 19:42 | #1 |
Новичок
Джуниор
Регистрация: 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. |
25.06.2022, 21:50 | #2 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,550
|
Обычно люди перед постом в форум читают правилп. Из раздела НАСТОЯТЕЛЬНО РЕКОМЕНДУЕМ им становится ясно, что прога оформляется с применением форматирования и тегов CODE. Иначе какой мазохист захочет читать эту простыню - я не знаю. И если просят помочь найти ошибку - пишут, в чём она заключается.
|
25.06.2022, 22:08 | #3 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Да уж. Это полотенце не легко прочитать.
Попробуйте поискать здесь Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
(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 |