Пётр Кушнир писал(а):
Из описания задач 8 и 9 понятно, что автор совершенно точно различает индекс L и число по индексу L.
А еще, наверное индексы массива в задачах начинаются с единицы, потому что в Обероне M[4] = 5. Возможно, это опечатка, так как две почти одинаковые задачи рядом.
Но если мы сделаем L = 3 для Оберона первом случае для массива с количеством заданных чисел N и длиной больше N имеем
Код:
i:=N;
WHILE (i>0) & (i>=L) DO
m[i] := m[i-1]; (* двигаем вправо *)
DEC(i)
END;
m[L] := 0;
и во втором
Код:
i:=0;
WHILE (i<N) & (m[i]#L) DO INC(i) END; (* линейный поиск *)
(* тут либо m[i] = L либо i = N *)
WHILE i+1<N DO
m[i]:=m[i+1]; (* двигаем влево *)
INC(i)
END;
m[i] := 0;
DEC, INC и # я нагуглил, не знал что это, общий смысл понятен теперь, но, двигая массив вправо/влево, так, как у вас описано, получается что значение элемента m[i], который присваивает m[i+/-1] на данном этапе пропадает, его нынешнее значение нигде не сохраняется, соответственно следующий присвоит его нынешнее значение и далее все элементы будут иметь значение стартового (если я не не упустил какую-то малозаметную деталь)... Такая постановка сильно упрощает задачу, о таких возможностях языка пока что не знал. И по поводу содержания индексов массивов, ранее в книге разбиралось весьма подробно, что содержать они могут любое значение в пределах своего типа данных, но пронумерованы индексами, так что думаю что последовательная нумерация элементов к условию задачи не имеет отношения. По сути же это не замена, индексов массива, содержащих значения становится на 1 больше и на 1 меньше соответствуя условию задачи...