В принципе, можно расписать, что делает эта программа (см. вложение). Так как изначально a[6] = 0, то a[3] = 50 раз к a[5] прибавится 2 * a[4] = 38, получится 38 * 50 + a[5] = 1917, затем значение a[5] будет выведено на экран.
Но проще не мучиться и просто написать программу, выполняющую этот код.
python 3.
array = [10, 330, 50, 19, 17, 0, 184, 0]
array_position = 2
program = "[->[->+>+<<]>>[-<+<+>>]<<<]>>."
stack = []
transitions = [None] * len(program)
for k, op in enumerate(program):
if op == '[':
stack.append(k)
elif op == ']':
v = stack.pop()
transitions[k] = v + 1
transitions[v] = k + 1
k = 0
while k < len(program):
op = program[k]
if op == '.':
print(array[array_position])
elif op == '>':
array_position += 1
elif op == '<':
array_position -= 1
elif op == '[' and array[array_position] == 0:
k = transitions[k]
continue
elif op == ']' and array[array_position] != 0:
k = transitions[k]
continue
elif op == '+':
array[array_position] += 1
elif op == '-':
array[array_position] -= 1
k += 1
Нужно искать близжаюшую степень двух, большую размера алфавита.
1) 7 символов, близжайшее 8 (2^3), значит вес символа алфавита 3 бита
3*21=63 (бита)
2)12 символов, близжайшая степень двойки 16 (2^4), вес символа алфавита 4бита.
4*64=2^8=256 (бит)
3)20 символов, близжайшая степень 32 (2^5), вес символа 5 бит.
5*40=200 (бит)
4) 54 символа, близжайшее 64 (2^6), вес символа 6 бит
6*120=720 (бит)
Var
x, a, s: real;
n, i: integer;
begin
write('Введите x и n ');
readln(x, n);
a := 1;
s := a;
for i := 1 to n do
begin
a := a * (-1) * x * x / (2 * i - 1) / (2 * i);
s := s + a;
end;
writeln('S = ', s:10:3);
end.
Ответ:
400 Мбайт/с
Объяснение:
32 бита = 32 / 8 = 4 байта
Производительность составит 100 × 4 = 400 Мбайт/с
Trunc(sqrt(16 div 3)) = Trunc(sqrt(5)) = <span>Trunc(2.24) = 2</span>