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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2012, 12:15   #1
__vasilich__
 
Регистрация: 07.06.2012
Сообщений: 5
Восклицание код хаффмана, нужны комментарии к готовому тексту

Код:
program Haffmen; 
{Кодировка файла на сжатие методом Хаффмена}

type
  RU = ^RP;
  KU = ^KC;
  SU = ^US;
  KE = ^EK;
  
  {1 }
  KC = Record
    B: Byte;
    Vp: RU;
    VN: KU
  End;
  
  {2 }
  EK = Record
    C: Char;
    Vp: RU
  End;
  
  {3 }
  RP = Record
    P: real;
    VP: KE;
  End;
  
  {4 }
  US = Record
    Uk: RU;
    Vn: SU;
    Vv: SU;
  End;

var
  Dat: Text;
  F, Name: String;
  KN, KT, KZ: KU;
  RN, RT, RZ: RU;
  SN, ST, SZ, M1, M2: SU;
  E1, E2: KE;
  H, P1, P2, Dl: real;
  N, I: integer;
  S: String;

begin
  Write('Введите имя файла с частотной таблицей -> ');
  Readln(F);
  Assign(Dat, F); ReSet(Dat);
  ReadLn(Dat, Name); ReadLn(Dat, N); ReadLn(Dat);
  
  {5 }
  I := 0;
  while not (EoLn(Dat)) Do 
  begin
    
    {6 }
    Inc(I);
    if I = 1 Then begin
      New(KN); New(RN); New(SN); 
      SN^.Uk := RN; KN^.Vp := RN; SN^.Vv := nil;
      ReadLn(Dat, KN^.B, RN^.P); KZ := KN; RZ := RN; SZ := SN;
    end
    Else begin
      New(KT); New(RT); New(ST); 
      ST^.Uk := RT; KT^.Vp := RT;
      ReadLn(Dat, KT^.B, RT^.P); KZ^.VN := KT; SZ^.Vn := ST; ST^.Vv := SZ;
      KZ := KT; RZ := RT; SZ := ST;
    end
    
  end;
  
  Readln(Dat); Readln(Dat,H);
  Close(Dat);  KT^.VN := nil; ST^.VN := nil;
  
  {7 }
  repeat
    
    {8 }
    ST := SN; M1 := ST; P1 := ST^.Uk^.P;
    while ST^.Vn <> nil do 
    begin
      ST := ST^.Vn;
      if ST^.Uk^.P <= P1 Then begin
        P1 := ST^.Uk^.P; M1 := ST
      end
    end;
    
    {9 }
    ST := SN;
    if M1 = SN Then ST := ST^.Vn;
    M2 := ST; P2 := ST^.Uk^.P;
    while ST^.Vn <> nil do 
    begin
      ST := ST^.Vn;
      if (ST <> M1) And (ST^.Uk^.P <= P2) Then begin
        P2 := ST^.Uk^.P; M2 := ST
      end
    end;
    
    {10 }
    New(E1); E1^.C := '0'; M1^.Uk^.Vp := E1;
    New(E2); E2^.C := '1'; M2^.Uk^.Vp := E2;
    New(RZ); E1^.Vp := RZ; E2^.Vp := RZ;
    RZ^.P := P1 + P2; RZ^.Vp := nil;
    
    {11 }
    if M2 <> SN Then begin
      M1^.Uk := RZ; ST := M2^.VV;
      if M2^.Vn <> nil Then begin
        SZ := M2^.Vn; ST^.Vn := SZ; SZ^.VV := ST
      end
      Else ST^.Vn := nil;
      Dispose(M2);
    end
    Else begin
      SN^.Uk := RZ; ST := M1^.VV;
      if M1^.Vn <> nil Then begin
        SZ := M1^.Vn; ST^.Vn := SZ; SZ^.VV := ST
      end
      Else ST^.Vn := nil;
      Dispose(M1);
    end;
    
  until SN^.Vn = nil;
  
  F := Copy(F, 1, Length(F) - 3) + 'Cod'; {12 }
  Assign(Dat, F); ReWrite(Dat);
  Writeln(Dat, Name); Writeln(Dat, N); Writeln(Dat);
  
  {13 }
  KT := KN; Dl := 0;
  repeat
    Write(Dat, KT^.B, #9); RT := KT^.Vp; S := '';
    while RT^.Vp <> nil Do 
    begin
      E1 := RT^.Vp; S := E1^.C + S; RT := E1^.Vp
    end;
    Dl := Dl + Length(S) * KT^.Vp^.P; KT := KT^.Vn; WriteLn(Dat, S);{14 }
  until KT^.Vn = nil;
  Write(Dat, KT^.B, #9); RT := KT^.Vp; S := '';
  while RT^.Vp <> nil Do 
  begin
    E1 := RT^.Vp; S := E1^.C + S; RT := E1^.Vp
  end;
  Writeln(Dat, S); WriteLn(Dat); 
  
  Dl := Dl + Length(S) * KT^.Vp^.P;{15 }
  
  WriteLn(Dat, Dl); 
  WriteLn(Dat, H); 
  
  Close(Dat)
  
end.
прога написана на паскалеАВС.нет, я толькот в делфи немного рразбираюсь, и хотя языыки во многом похожи(ИЗ ВСЕХ МОИХ ЗНАНИЙ Я ПОНИМАЮ В ЭТОМ ТЕКСТЕ КАМАНДЫ ЦИКЛОВ, НО МНЕ НЕ ЯСНЫ ЗНАЧЕНИЯ КАЖДОЙ ПЕРЕМЕННОЙ, ХОТЯБЫ УЗНАТЬ ДЛЯ ЧЕГО НУЖНА КАЖДАЯ ПЕРЕМЕННАЯ), здесь столько указателей на разные переменные что я не могу разабраться вобще, сам код Хаффмана в теории панятен, но как он здесь реализуеться я не понимаю, по всем форумам по этой теме в основном люди ищут сам код проги, у меня же код есть а вот написать коментарии к ниму я не могу,
вот, вобщем, если кто-нибудь в этом разбирается - ПОМОГИТЕ ПОЖАЛУЙСТА

Последний раз редактировалось ACE Valery; 07.06.2012 в 19:54.
__vasilich__ вне форума Ответить с цитированием
Старый 07.06.2012, 12:26   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

исходник, походу, был обфусцирован, написать и отладить такую кашу вменяемый человек не мог
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.06.2012, 12:29   #3
__vasilich__
 
Регистрация: 07.06.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
исходник, походу, был обфусцирован, написать и отладить такую кашу вменяемый человек не мог
обфусцирован* в смысле подогннан из другого кода? и че мне терь делать
__vasilich__ вне форума Ответить с цитированием
Старый 07.06.2012, 12:33   #4
__vasilich__
 
Регистрация: 07.06.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
исходник, походу, был обфусцирован, написать и отладить такую кашу вменяемый человек не мог
эт препод который работает только в паскале, другие языки не признает, не знаю, где он брал этот код, но вот нам задаеться либо хаффман либо шенон, так я глянул шенон, там настолько простенький код что даже я б разабрался, но не мой вариант, а тут хер разберешьься
__vasilich__ вне форума Ответить с цитированием
Старый 07.06.2012, 13:48   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

обфускация подразумевает такое изменение исходного кода, которое не приводит к нарушению его работоспособности, но делает его практически нечитаемым

если "сам код Хаффмана в теории панятен", то проще написать свой код, чем разбираться в этой ерунде
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.06.2012, 18:50   #6
__vasilich__
 
Регистрация: 07.06.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
обфускация подразумевает такое изменение исходного кода, которое не приводит к нарушению его работоспособности, но делает его практически нечитаемым

если "сам код Хаффмана в теории панятен", то проще написать свой код, чем разбираться в этой ерунде
оно то конечно проще да толька я не знаю как для начала хотябы построить дерево по хаффману, я написал(тоже вобщем то не сам) прогу которая подсчитывает частоту вхождения каждого байта в файле и сортирует по убыванию, как теперь дальше не знаю
__vasilich__ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужны комментарии Олеся2 Помощь студентам 0 21.12.2011 17:37
нужны комментарии к программе ! dezder Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 19.12.2011 23:06
нужны комментарии protrence Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 08.12.2011 12:21