Проверил у себя обе программы - всё работает, у Вас тоже должно работать.
Задание 1).
Program Summ_S;
var I, N, DENOMINATOR: integer; S, SUMM: real;
begin N:=1;
for I:=1 to 999 do begin if DENOMINATOR=128 then begin write('S = '+SUMM); break; end; DENOMINATOR:=N*2; S:=1/DENOMINATOR; // 1/1*2, 1/2*2, 1/4*2... N:=DENOMINATOR; SUMM:=SUMM+S; end; end.
Задание 2).
Program Massive;
var num_1, num_2, num_3, num_4, num_5, num_6, num_7, num_8, num_9, num_10, number: longint; i: integer; begin for i:=1 to 10 do begin write('Введите число: '); readln(number); case i of 1:num_1:=number; 2:num_2:=number; 3:num_3:=number; 4:num_4:=number; 5:num_5:=number; 6:num_6:=number; 7:num_7:=number; 8:num_8:=number; 9:num_9:=number; 10:num_10:=number; end; end; writeln('Введенные числа в обратном порядке: ' +num_10,num_9,num_8,num_7,num_6, num_5,num_4,num_3,num_2,num_1); end.
P.S Можно и по другому сделать, но я уже паскаль особо не помню.
4) ✔ префиксный длина А: 2, длина Б: 3, длина В: 1, длина Г: 3 Длина сообщения: 10 * 2 + 5 * 3 + 20 * 1 + 5 * 3 = 20 + 15 + 20 + 15 = 70 бит
Наиболее оптимальный код 4).
Если бы нужно было бы найти какое-нибудь оптимальное префиксное кодирование, можно было бы построить код Хаффмана. Выписываем частоты символов, а затем объединяем наименее часто встречающиеся символы, почлучая кодовое дерево.
А - 10, Б - 5, В - 20, Г - 5 А - 10, (БГ) - 10, В - 20 (А(БГ)) - 20, В - 20 (В(А(БГ)) - 40
Если в этой записи есть (XY), то к коду любой буквы из X приписываем слева 0, для любого символа из Y - 1. Начинаем с пустых кодов: (БГ) -> Б: 0, Г: 1 (А(БГ)) -> А: 0, Б: 10, Г: 11 (В(А(БГ)) -> В: 0, А: 10, Б: 110, Г: 111.
Задание 1).
Program Summ_S;
var
I, N, DENOMINATOR: integer;
S, SUMM: real;
begin
N:=1;
for I:=1 to 999 do begin
if DENOMINATOR=128 then begin
write('S = '+SUMM);
break;
end;
DENOMINATOR:=N*2;
S:=1/DENOMINATOR; // 1/1*2, 1/2*2, 1/4*2...
N:=DENOMINATOR;
SUMM:=SUMM+S;
end;
end.
Задание 2).
Program Massive;
var
num_1, num_2, num_3, num_4, num_5,
num_6, num_7, num_8, num_9, num_10,
number: longint;
i: integer;
begin
for i:=1 to 10 do begin
write('Введите число: ');
readln(number);
case i of
1:num_1:=number;
2:num_2:=number;
3:num_3:=number;
4:num_4:=number;
5:num_5:=number;
6:num_6:=number;
7:num_7:=number;
8:num_8:=number;
9:num_9:=number;
10:num_10:=number;
end;
end;
writeln('Введенные числа в обратном порядке: '
+num_10,num_9,num_8,num_7,num_6,
num_5,num_4,num_3,num_2,num_1);
end.
P.S Можно и по другому сделать, но я уже паскаль особо не помню.
Надеюсь удачи :)
1) ✔ префиксный
длина А: 1, длина Б: 2, длина В: 3, длина Г: 3
Длина сообщения: 10 * 1 + 5 * 2 + 20 * 3 + 5 * 3 = 10 + 10 + 60 + 15 = 95 бит
2) ✔ префиксный
длины кодовых слов: 2
Длина сообщения: (10 + 5 + 20 + 5) * 2 = 40 * 2 = 80 бит
3) ✘ не префиксный (11 - префикс 111)
4) ✔ префиксный
длина А: 2, длина Б: 3, длина В: 1, длина Г: 3
Длина сообщения: 10 * 2 + 5 * 3 + 20 * 1 + 5 * 3 = 20 + 15 + 20 + 15 = 70 бит
Наиболее оптимальный код 4).
Если бы нужно было бы найти какое-нибудь оптимальное префиксное кодирование, можно было бы построить код Хаффмана.
Выписываем частоты символов, а затем объединяем наименее часто встречающиеся символы, почлучая кодовое дерево.
А - 10, Б - 5, В - 20, Г - 5
А - 10, (БГ) - 10, В - 20
(А(БГ)) - 20, В - 20
(В(А(БГ)) - 40
Если в этой записи есть (XY), то к коду любой буквы из X приписываем слева 0, для любого символа из Y - 1. Начинаем с пустых кодов:
(БГ) -> Б: 0, Г: 1
(А(БГ)) -> А: 0, Б: 10, Г: 11
(В(А(БГ)) -> В: 0, А: 10, Б: 110, Г: 111.
Доказано, что такой код будет оптимальным.