IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Алгоритм Хаффмана
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Женский

Репутация: -  0  +


Здравствуйте, я сейчас пишу программу по алгоритму Хаффмана и столкнулась с проблемой: при кодировании, если ввожу такую строку "kkkkkkk", то по идее должно выдавать ошибку о том, что дерево не может быть создано. Подскажите, пожалуйста, как сделать проверку на такой случай, когда мы вводим только одну букву несколько раз?
Вот моя процедура кодирования:
Procedure shifr();
var i, n:integer;
begin
writeln('Введите текст: ');
readln(s);
for i := 0 to 255 do //Инициализация массива(счетчика)
mass[i] := 0;
for i := 1 to length(s) do //подсчет числа символов
inc(mass[ord(s[i])]);//выдает код i-того символа
n := 0;
for i := 0 to 255 do
if mass[i] <> 0 then begin//Формируем листья дерева
inc(n);
new(TMass[n]);
TMass[n]^.N := Mass[i];
TMass[n]^.symbol := chr(i);
TMass[n]^.Left := nil;
TMass[n]^.Right := nil;
end;
Sort(TMass, N);

//Формируем само дерево
while n > 1 do
begin
new(p);
p^.n := TMass[n]^.N + TMass[n - 1]^.N;
p^.left := TMass[n - 1];
p^.right := TMass[n];
TMass[n - 1] := p;
Dec(n); //Уменьшает значение n на 1
Sort(TMass, N);
end;

//Подсчитываем число бит для закодированного текста
n:=0;
for i:=0 to 255 do
if mass[i]<>0 then
n:=n+mass[i]*length(GetCode(p, chr(i), ''));
Writeln('Число бит закодированного текста: ',n);

g := ''; //Кодируем строку
for i := 1 to length(s) do
begin
g:=g+GetCode(p, s[i], '');
end;
Writeln('Закодированный текст: ', g);
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 6.05.2024 11:27
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name