Рассмотрим два решения этой задачи.
Алгоритм первого решения:
1. Просматриваем массив .
2. Если элемент<0, то удаляем его и n уменьшаем.
3. Если элемент>=0, то переходим к следующему.
Фрагмент программы:
…
i:=1;
while i <= n do {в цикле просматриваем элементы массива}
begin
if A[i]<0 then {проверяем, нужно ли удалять i-ый элемент}
begin {если нужно – удаляем i-ый элемент}
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
...
{переписанных элементов пока не было}
k :=0;
for i :=1 to n do { в цикле просматриваем элементы массива}
if not(A[ i ] < 0) then
begin
Inc(k); {увеличиваем значение k на 1}
A[k]:=A[i]; {переписываем i-ый элемент в позицию k}
end;
n := k; { в массиве оставляем k элементов}
Пример прогона алгоритма:
Исходный массив: -1 -2 2 -3 -4 3
Состояния массива после просмотра очередного элемента
массива:
0: k=0, i=1, n=6: -1 -2 2 -3 -4
3 {не переписываем}
1: k=0, i=2, n=6; -1 -2 2 -3 -4
3 {не переписываем}
2: k=1, i=3, n=6; 2 -2 2 -3 -4
3 {переписываем a[1]:=a[3]}
3: k=1, i=4, n=6; 2 -2 2 -3 -4
3 {не переписываем}
4: k=1, i=5, n=6; 2 -2 2 -3 -4
3 {не переписываем}
5: k=2, i=6, n=6; 2 3 2 -3 -4
3 {переписываем a[2]:=a[6]}
6: k=2, i=7, n=6: 2 3 2 -3 -4
3 {выход из цикла}
7: n=2: 2 3 {значение k переписываем в n}
<<Назад | 1 | 2 |