Расшифровать фразу, зашифрованную двойной перестановкой (сначала были переставлены столбцы, затем строки) зшафипралоенж_оьн_дарвона _еаляранвяачда_ерпесанв_ч _и_ентрзи_окевнодлеша_имп робдоевпс_мсхьа_ _ивпсниот есдногтеанн_неовмр_еунпте _йестово_ниинлаетиждсопв_ ндиаеоылпне_ _нвеангт_изла п_бирдльнев_оп_опздевыгеа мдооитеь_смт_надтесубехно аиналжнолешф_зи_уароьсне_
Корректное задание смотри в приложении.
Первый решения это перевести данное число в десятичную систему счисления по формуле:
И выполнить деление.
Но можно и проще. Рассмотрим приведённую формулу для двоичной системы счисления:
Заметим, что каждое слагаемое, начиная c a₂ и левее, кратно 4. Т.к. далее будут a₃·8, a₄·16, a₅·32, ...
Алфавит двоичной системы счисления содержит только 0 и 1. Поэтому для кратности 4 две цифры с левого края должны быть нулями. Иначе при делении на 4 будет остаток 1, 2 или 2+1=3.
Таким образом подходят числа под 1 и 2 номерами.
ответ: 1) 10100₂; 2) 1110100₂
var
c, a: array[1..20] of integer;
i: integer;
begin
write('Первый массив ');
for i := 1 to 20 do begin
c[i] := i * (-5);
write(c[i], ' ');
end;
writeln;
write('Преобразованный массив ');
for i := 1 to 20 do begin
a[i] := c[20 - i + 1];
write(a[i], ' ');
end;
end.
ИЛИ Программа не использующая два массива, а просто переворачивающая первый
var
c: array[1..20] of integer;
i: integer;
begin write('Первый массив ');
for i := 1 to 20 do begin
c[i] := i * (-5);
write(c[i], ' ');
end;
writeln;
write('Преобразованный массив ');
for i := 20 downto 1 do write(c[i], ' ');
end.
Обе программы работают!