// PascalABC.NET 3.3.5, сборка 1644 от 23.03.2018 // Внимание! Если программа не работает, обновите версию!
function aToDec(n:string;k:integer):string; // Перевод из системы по основанию k в десятичную begin var s:='0123456789ABCDEF'; Result:=''; var PointPos:=Pos('.',n); if PointPos>0 then begin // есть дробная часть var sFracPart:=n[PointPos+1:]; var r:=0.0; var p:=k; foreach var c in sFracPart do begin r+=(Pos(c,s)-1)/p; p*=k; end; Result:=r.ToString[2:] end else PointPos:=n.Length+1; var pa:=1; n:=n[:PointPos]; var p:=0; foreach var c in n.Reverse do begin p+=pa*(Pos(c,s)-1); pa*=k end; Result:=p.ToString+Result end;
function DecToa(n:string;k:integer):string; // Перевод из десятичной системы в систему по основанию k begin var s:='0123456789ABCDEF'; Result:=''; var PointPos:=Pos('.',n); var IntPart:integer; if PointPos>0 then begin // есть дробная часть var FracPart:=Frac(n.ToReal); var m:=0; while True do begin var r:=FracPart*k; Result+=s[Trunc(r)+1]; FracPart:=Frac(r); m+=1; if (m=15) or (FracPart=0) then break end; IntPart:=n[:PointPos].ToInteger; end else IntPart:=n.ToInteger; if Result<>'' then Result:='.'+Result; while IntPart>0 do begin Result:=s[IntPart mod k+1]+Result; IntPart:=IntPart div k end; if Result='' then Result:='0'; if Result[1]='.' then Result:='0'+Result end;
function AtoB(s:string;A,B:integer):string; // Перевод из системы по основанию A в систему по основанию B begin if A=10 then Result:=DecToa(s,B) else if B=10 then Result:=aToDec(s,A) else Result:=DecToa(aToDec(s,A),B) end;
begin var n:=ReadlnString('Какое число перевести?'); var (a,b):=ReadInteger2('Исходное и результирующее основания:'); Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')'); end.
Пример Какое число перевести? 345.653 Исходное и результирующее основания: 8 16 345.653(8) = E5.D58(16)
Из условия Фано следует, что в префиксном неравномерном двоичном коде, предусматривающем однозначное декодирование, ни одно кодовое слово не может быть началом другого.
Таким образом, оставшиеся три кода не могут быть началом кода буквы Б, и началами кодов друг друга.
То есть коды 0 и 00 отпадают сразу, т.к. это начала буквы Б.
Если предположить, что один из кодов равен 1, и что нам нужны кратчайшие коды, значит оставшиеся коды могут быть только 01 и 011.
Если предположить, что коды двузначны, тогда кодами могут быть 01, 10 и 11.
В первом случае суммарная длина кодов равна 1+2+3+3 = 9, во втором случае - 2+2+2+3 = 9.
Оба варианта подходят, кратчайшая суммарная длина - 9
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку