1)В алфавите 16 символов, т.к. N=2 в степени i. i=4
2)запишем условие: N=32, K=221, I-?
Решение: из формулы мощности алфавита найдем информационный вес 1 символа: 32=2 в степени i. Отсюда i=5 бит.
Подставим i в формулу информационного объема сообщения:
I=K*i=221*5бит=1105 бит Это и есть ответ
3)Запишем условие: N=256 (мощность компьютерного алфавита)
I=4Kб , К-?
Решение: выразим информационный объем в битах
I=4*1024*8бит
Найдем информационный вес 1 символа по формуле N=2 в степени i
256=2 в степени i, i=8 бит
Выразим К из формулы информационного объема
К=I/i, K=(4*1024*8)/8=4096 символов Это и есть ответ
Внимание! Если программа не работает, обновите версию!
procedure Preobraz(var Stroka:string);
begin
var bq:=new Queue<(integer,integer)>;
foreach var m in Stroka.Matches('\s+') do
bq.Enqueue((m.Index,m.Length));
var wq:=new Queue<(integer,string)>;
foreach var m in Stroka.Matches('\S+') do
if m.Value.Any(t->t in ['0'..'9']) then wq.Enqueue((m.Index,''))
else wq.Enqueue((m.Index,m.Value));
Stroka:='';
var pbi,pwi:integer;
while (bq.Count>0) and (wq.Count>0) do begin
(pbi,pwi):=(bq.Peek[0],wq.Peek[0]);
if pbi<pwi then begin
Stroka:=Stroka+bq.Peek[1]*' ';
bq.Dequeue
end
else begin
Stroka:=Stroka+wq.Peek[1];
wq.Dequeue
end
end;
while bq.Count>0 do begin
Stroka:=Stroka+bq.Peek[1]*' ';
bq.Dequeue
end;
while wq.Count>0 do begin
Stroka:=Stroka+wq.Peek[1];
wq.Dequeue
end
end;
begin
var s:=ReadlnString;
Preobraz(s);
s:='<'+s+'>'; // чтобы было видно, как работает
s.Println
end.