Пока что у меня следующие вопросы...
почему, когда с текстового файла перегоняют символы в массив, запоминают аски код(во всех программах, которые встречал в инете), а не сам символ, почему в этом же массиве учитывается не частота появления символа в текстовом файле, а вероятность... и последнее, мне кажется в приведённом ниже коде есть ошибка в цикле вычисления вероятности в условии if (P[b+1].kol_symb <> 0) then ..., т.к. индекс b не определён, для этого цикла... но если индекс не b, то какой должен быть индекс...
- Код: Выделить всё
- Procedure Get_pseudo_table (fname: string;
 var P: Pseudo_table;
 var k: integer;
 var flen: longint);
 Var
 f: file;
 b: byte;
 i: integer;
 KS: longint;
 Begin
 KS:= 0; { кол-во встреч символа }
 k:= 0;
 For i:=1 to 256 do
 begin
 P[i].kol_symb:= 0;
 P[i].sum_ver:= 0;
 P[i].code:= NIL;
 end;
 Assign (f, fname);
 Reset (f, 1);
 while (not eof (f)) do
 begin
 BlockRead (f, b, 1); { считывает 1 переменную из файла в перем b}
 if (P[b+1].kol_symb = 0) then {если в псевдосимволе
 кол-во символов=0} {1-ый раз встречается}
 begin
 inc (k);
 P[b+1].kol_symb:= 1;
 P[b+1].code:= New (PtrCode);
 P[b+1].code^.symb:= b;
 P[b+1].code^.len:= 0; { длина в двоичном разряде:=0 }
 P[b+1].code^.next:= NIL;
 for i:=1 to 32 do
 P[b+1].code^.code[i]:= 0; { весь двоичный код записываем нулями}
 end;
 P[b+1].sum_ver:= P[b+1].sum_ver+1; { если встреч не 1-ый раз, то}
 inc (KS); {увеличиваем кол-во этого эл-та в файле на 1}
 end;
 Close (f);
 For i:=1 to 256 do
 --> индекс b должен быть или нет? if (P[b+1].kol_symb <> 0) then { если псевдосимвол не пуст, т.е. там есть какие-то символы}
 P[i].sum_ver:= P[i].sum_ver / KS; { вычисление вероятности появления}
 flen:= KS;
 End;



