Имеем байтики в RLE:
0x01, 0x80, 0x85, 0x37, 0x02, 0x05, 0x7F, 0x83, 0x21 - в шестнадцатеричной
%0000 0001, %1000 0000, %1000 0101, %0011 1111, %0000 0010, %0000 0101, %0111 1111, %1000 0011, %0010 0001 - в двоичной
Декодируем:
0x01 0x80 > 0x80 (берём 1 последующий байт)
0x85 0x37 > 0x37 0x37 0x37 0x37 0x37 (повторяем следующий байт 5 раз)
0x02 0x05 0x7F --> 0x05 0x7F (2 последующих байта)
0x83 0x21 --> 0x21 0x21 0x21 (повторяем 0x21 3 раза)
Декодированная последовательность байт:
0x80 0x37 0x37 0x37 0x37 0x37 0x05 0x7F 0x21 0x21 0x21
Всего 11 байт.
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('n=');
var a:=ArrRandom(n,-35,35); a.Println;
var (k1,k3):=ReadInteger2('Введите границы индексов для замены элементов:');
// блок "защиты от дурака"
if k1<1 then k1:=1;
if k1>n-1 then k1:=n-1;
if k3<1 then k3:=1;
if k3>n-1 then k3:=n-1;
if k1>k3 then Swap(k1,k3);
//
for var i:=k1-1 to k3-1 do a[i]:=-a[i];
a.Println
end.
Пример
n= 13
-27 18 15 31 27 -1 -5 20 -20 -34 -7 -33 16
Введите границы индексов для замены элементов: 6 9
-27 18 15 31 27 1 5 -20 20 -34 -7 -33 16