1. После получения сообщения о номере пути был сделан выбор 1 из 8, т.е. неопределенность информации о номере пути уменьшилась в 8 раз. Логарифм по основанию 2 от 8 равен 3, следовательно мы получили 3 бита информации. 2. Если сообщение несет 4 бита информации, то неопределенность наших знаний о предмете сообщения уменьшилась в 2^4=16 раз. Если бы в коробке были одноцветные карандаши, неопределенность уменьшилась бы в 2^6=64 раза и мы бы получили 0 байт информации (если все карандаши белые, сообщение о вынутом белом карандаше не несет ничего нового). В нашем случае получено на 2 байта больше, следовательно белых карандашей 2^2=4 штуки.
Var f: string := 'output1.txt'; fo: array of string := ('out1.txt', 'out2.txt', 'out3.txt'); bools: array [0..2] of boolean; a, b: integer;
begin System.IO.File.WriteAllText(f, ''); foreach str: string in fo do System.IO.File.WriteAllText(str, '');
readln(a, b); for i: integer := a to b do System.IO.File.AppendAllText(f, i.toString() + System.Environment.NewLine);
foreach str: string in System.IO.File.ReadAllLines(f) do begin b := StrToInt(str); bools[System.Math.Sign(b) + 1] := true; System.IO.File.AppendAllText(fo[System.Math.Sign(b) + 1], b.ToString() + System.Environment.NewLine); end;
for i: integer := 0 to 2 do if not (bools[i]) then begin write('В файле с '); case i of 2: write('положительными'); 1: write('нулевыми'); 0: write('отрицательными'); end; writeln(' значениями нет записей'); end; end.
2. Если сообщение несет 4 бита информации, то неопределенность наших знаний о предмете сообщения уменьшилась в 2^4=16 раз. Если бы в коробке были одноцветные карандаши, неопределенность уменьшилась бы в 2^6=64 раза и мы бы получили 0 байт информации (если все карандаши белые, сообщение о вынутом белом карандаше не несет ничего нового). В нашем случае получено на 2 байта больше, следовательно белых карандашей 2^2=4 штуки.
f: string := 'output1.txt';
fo: array of string := ('out1.txt', 'out2.txt', 'out3.txt');
bools: array [0..2] of boolean;
a, b: integer;
begin
System.IO.File.WriteAllText(f, '');
foreach str: string in fo do
System.IO.File.WriteAllText(str, '');
readln(a, b);
for i: integer := a to b do
System.IO.File.AppendAllText(f, i.toString() + System.Environment.NewLine);
foreach str: string in System.IO.File.ReadAllLines(f) do
begin
b := StrToInt(str);
bools[System.Math.Sign(b) + 1] := true;
System.IO.File.AppendAllText(fo[System.Math.Sign(b) + 1], b.ToString() + System.Environment.NewLine);
end;
for i: integer := 0 to 2 do
if not (bools[i]) then
begin
write('В файле с ');
case i of
2: write('положительными');
1: write('нулевыми');
0: write('отрицательными');
end;
writeln(' значениями нет записей');
end;
end.