Обработка массивов. Власенко О.Ф - 21 стр.

UptoLike

for j:=i to n-1 do {сдвигаем}
A[j]:=A[j+1];
Dec(n); {уменьшаем количество элементов}
end
else Inc(i); {если удалять не нужно, то переходим
к следующему элементу}
end;
Пример прогона алгоритма:
Исходный массив:
0: i=1, n=6: -1 -2 2 -3 -4 3
Состояния массива после обработки очередного элемента
массива:
1: i=1, n=5: -2 2 -3 -4 3 (удален -1)
2: i=1, n=4: 2 -3 -4 3 (удален -2)
3: i=2, n=4: 2 -1 -2 3 (перешли на следующий)
4: i=2, n=3: 2 -4 3 (удален -3)
5: i=2, n=2: 2 3 (удален -4)
6: i=3, n=2: 2 3 (перешли на следующий)
Алгоритм второго решения:
1. Счетчик переписанных элементов k=0.
2. Просматриваем элементы массива.
3. Если элемент A[i] не меньше 0, k увеличиваем на 1 и
переписываем элемент A[i] на k-ое место.
4. После просмотра всего массива количество переписанных
элементов k заносим в n.
Фрагмент программы:
Var {дополнительные переменные}
k:IndexEl; {количество переписанных элементов}
Begin
...
{1 - переписанных элементов пока не было}
k:=0;
{2 - в цикле просматриваем элементы массива}
for i:=1 to n do
{3 - если A[i] не <0}
if not(A[i]<0) then
begin
Inc(k); {увеличиваем значение k на 1}
A[k]:=A[i]; {переписываем i-ый элемент в позицию k}
end;