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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2016, 20:11   #1
Abdelliamo
Новичок
Джуниор
 
Регистрация: 12.12.2016
Сообщений: 1
По умолчанию (Pascal ABC) Алгоритм Хаффмана: создание дерева и кодов символов

Здравствуйте!

Необходимо написать программу, кодирующую текст по алгоритму Хаффмана на Pascal ABC.

Скажем так: я взял ДЗ на высший балл, но никто не предупреждал, что могут дать ДЗ, в котором необходимо будет знать куда больше, чем мы прошли.
И вот сегодня, за 3 дня до дедлайна ДЗ, нам рассказали про указатели. Лишь рассказали теорию. И препод после пары мне сообщил, что кодирование в Хаффмане делается как раз исключительно благодаря указателям.

Так вот.. Очень нужна помощь, так как понятного простого кода на Pascal ABC для Хаффмана я найти не могу. Ниже я представил основную программу, что у меня есть, и нужно как-то создать дерево Хаффмана, а потом создать префиксные коды для каждого элемента. Для меня это непосильная на данный момент задача, сдавать уже в пятницу утром, и я очень надеюсь на помощь...

Если кто-то отзовется и спасет - постараюсь отблагодарить, как смогу, честно. Мне очень стыдно и с приближающейся сессией еще страшнее...

Цитата:
Код:
type
   numbersArray = array[0..255] of integer;
   CharList = array[1..256] of byte;
 
var 
   Name1, Name2, Name3: string; 
   f1, f2, f3: file of byte; 
   numbers: numbersArray;  // Кол-во прочитанных символов в тексте
   symbols: CharList;   // Прочитанные символы
   CurrChar, obm: byte;
   chars: array[1..256] of byte;
   i, j, k, ka: integer;
   
 
begin
   assignfile(fIn,Name1)
   for i:=0 to 255 do
      numbers[i]:=0;
   reset(fIn);
   CurrChar:=1;
   while not eof(fIn) do 
   begin
      read(fIn, CurrChar);
      Inc(numbers[CurrChar]);
   end;
   closefile(fIn);
   
   k:=0;
   for i:=0 to 255 do
   begin
      if (numbers[i]<>0) then
      begin
         Inc(k);
         symbols[k]:=i;
      end;
   end;
   ka:=k;
   if (ka=1) then code[ka]:=0;
   while (ka>1) do begin      
     { for i:=1 to k do
         for j:=1 to (k - 1) do
            if (numbers[symbols[j]] > numbers[symbols[j+1]]) then
            begin
               obm:=symbols[j]; 
               symbols[j]:=symbols[j + 1]; 
               symbols[j+1]:=obm;
            end;  }   
            
     {Выше я выделил в скобки сортировку по возрастанию, ее нужно
            проводить по циклу каждый раз, как строится дерево}
      
{!!!А здесь необходимо построение дерева и определение кодов каждому элементу!!!}    
      
{Запись нового файла есть, благодаря здешнему шикарному модератору, как и почти вся программа}
   
end.
Abdelliamo вне форума Ответить с цитированием
Старый 14.12.2016, 10:22   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

только для вас Хаффман на pascal c описанием алгоритма.
Цитата:
так как понятного простого кода на Pascal ABC для Хаффмана я найти не могу
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.12.2016 в 10:25.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Хаффмана. Вывод таблицы закодированных символов Любимая C# (си шарп) 0 19.11.2014 22:13
Построить алгоритм в виде блок-схем и написать соответствующую программу на языке Pascal / Pascal ABC IgorMyakota Паскаль, Turbo Pascal, PascalABC.NET 9 06.03.2014 07:32
Алгоритм сжатия Хаффмана (найти ошибки), Pascal WestCoast Фриланс 0 16.01.2014 20:28
Очень нужна таблица кодов символов/кнопок в Pascal ABC (псевдографика) CnpuHTep Помощь студентам 30 15.05.2012 23:20
Проверка кодов Хаффмана BaSoff Общие вопросы C/C++ 1 21.03.2010 17:26