Строить коды для алфавита из двух символов немного странно - и так понятно, что получатся 0 и 1, и все эти кодирования бессмысленны.
Код Шеннона - Фано: делим знаки на две части, чтобы суммарные вероятности появления символов частей были максимально близки (тут в каждой части всего один символ - иначе никак). Одной приписываем 0, другой 1. На этом всё кончилось.
Код Хаффмана: выбираем два символа с наименьшими вероятностями, у одного постфикс 0, у другого 1. Объединяем в одну вершину, и она осталась одна. Конец.
В среднем 1 символ - 1 бит. Энтропия -∑ p ㏒₂ p = -0.33 log 0.33 - 0.67 log 0.67 = 0.915 бит на символ.
Учитывая, что энтропия всегда не превосходит среднюю длину кода, тут сошлось.
Var C:string; i:integer; begin Read(C); if Length(C) mod 4 <> 0 then For i:= 1 to 4-Length(C) mod 4 do C:='0'+C; For i:= 1 to Length(C) div 4 do Case StrToInt(C[4*i-3]+C[4*i-2]+C[4*i-1]+C[4*i]) of 0000:Write(0); 0001:Write(1); 0010:Write(2); 0011:Write(3); 0100:Write(4); 0101:Write(5); 0110:Write(6); 0111:Write(7); 1000:Write(8); 1001:Write(9); 1010:Write('A'); 1011:Write('B'); 1100:Write('C'); 1101:Write('D'); 1110:Write('E'); 1111:Write('F'); End; ReadLn; end.
Паскаль.
program jjj;
var a: array [1..10] of integer; i,summa,proizv:integer;
begin
for i:=1 to 10 do begin
Writeln('напишите элемент массива номер ',i); read(a[i]);
end;
For i:=1 to 10 do begin
if a[i] mod 2=0 then summa:=summa+a[i] else
if (a[i]<=10) and (a[i]>=1) then proizv:=proizv*a[i];
end;
Writeln(summa,' ',proizv); readln;
end.
Жирным - это то, что я добавил)