В качестве примера равномерного кода можно назвать ASCII-таблицу, где каждому из 256 символов сопоставлено двоичное значение от 00000000 до 11111111. Независимо от вероятности появления символа на его представление отводится 1 байт, или 8 бит. Как известно, национальные языки обладают большой избыточностью, то есть разницей между энтропией источника и максимально возможной энтропией, обусловленной равной вероятностью появления любого символа из алфавита. Например, избыточность русского языка составляет 70%, а английского – 50%. Это в частности означает, что некоторые буквы появляются в тексте гораздо чаще других и поэтому использовать равномерное кодирование нерационально. При неравномерном кодировании часто встречающимся символам сопоставляются более короткие кодовые последовательности, редко встречающимся – более длинные. За счет этого удается значительно сократить объем файла без потерь информации. Существует несколько методов неравномерного кодирования, важнейших из которых является метод Шеннона-Фано. как-то так
okison2847
10.11.2021
Function aToDec(n:string;k:integer):longint; { Перевод из системы по основанию k в десятичную } var i:integer; pa,s:longint; begin s:=0; pa:=1; for i:=Length(n) downto 1 do begin s:=s+pa*(Ord(n[i])-Ord('0')); pa:=pa*k end; aToDec:=s end;
function DecToa(n:longint;k:integer):string; { Перевод из десятичной системы в систему по основанию k } var s:string; c:integer; begin s:=''; c:=Ord('0'); while n>0 do begin s:=Chr(c+n mod k)+s; n:=n div k end; DecToa:=s end;
function AtoB(s:string;A,B:integer):string; { Перевод из системы по основанию A в систему по основанию B } begin AtoB:=DecToa(aToDec(s,A),B) end;
var a,b:integer; n:string; begin Write('Число в c/c по основанию [2;10]: '); Readln(n); Writeln('Укажите исходное и результирующее основания: '); Read(a,b); Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')'); end.
Пример решения Число в c/c по основанию [2;10]: 643342414 Укажите исходное и результирующее основания: 7 9 643342414(7) = 80050347(9)