Ответ : равномерное кодирование удобно для декодирования. однако часто применяют и неравномерные коды, т.е. коды с различной длиной кодовых слов. это полезно, когда в исходном тексте разные буквы встречаются с разной частотой. тогда часто встречающиеся символы стоит кодировать более короткими словами, а редкие – более длинными. из примера 1 видно, что (в отличие от равномерных кодов! ) не все неравномерные коды допускают однозначное декодирование.
есть простое условие, при выполнении которого неравномерный код допускает однозначное декодирование.
код называется префиксным, если в нем нет ни одного кодового слова, которое было бы началом (по-научному, - префиксом) другого кодового слова.
код из примера 1 – не префиксный, так как, например, код буквы а (т.е. кодовое слово 1) – префикс кода буквы к (т.е. кодового слова 12, префикс выделен жирным шрифтом).
var i,j,n:longint; f:boolean; begin writeln('Введите число'); readln(n); if n<2 then writeln('Простых делителей нет') else begin write('Число ',n,' ','= 1'); for i:=2 to n do if n mod i=0 then begin f:=true; j:=2; while f and(j<=round(sqrt(i/2)))do begin if i mod j=0 then f:=false else j:=j+1; end; if f then write('*',i); end; end; end.
,79 * умножаем только дробную часть числа, искомая двоичная
2 дробь записывается из целых сверху-вниз 0,79≈0,11011
1,58*
2
1,40
2 131,79=10000011,11011
0,8
2
1,6
2
1,2