| Сьогодні | Разом | |
| Відвідувань | 26 | 5392717 |
| Авторізацій | 1 | 433334 |
| Користувачів | 2 | 2715 |
27. Удаление элемента массива
n := n - 1; for i := 3 to n do a[i] := a[i + 1];В этом примере мы удалили третий элемент массива, но что мешает вместо фиксированного значения "3" указать произвольный элемент массива, например индекс которого хранится в переменной k?
n := n - 1; for i := k to n do a[i] := a[i + 1];PS: В действительности количество элементов массива не изменилось, так как в Pascal массивы статичны, и их длина определяется на этапе объявления. Но число "живых" элементов массива изменилось и оно определяется значением переменной n.
28. Удалить первый нулевой элемент массива
k := 1; while (k <= n) and (a[k] <> 0) do k := k + 1;Итак, переменная k содержит индекс первого нулевого элемента массива, если он существует, или на единицу больше, чем значение переменной n. Это означает, что в массиве нет нулевого элемента (, а значит и удалять ничего не нужно).
if (k <= n)
then begin
// Удалить k-й элемент массива
end
Объединим в единое целое получим:
k := 1;
while (k <= n) and (a[k] <> 0) do
k := k + 1;
if (k <= n)
then begin
n := n - 1;
for i := k do n do
a[i] := a[i + 1]
end
И так, первый нулевой элемент массива удален. А как быть, если надо удалить все нулевые элементы массива?
29. Удаление всех нулевых элементов массива
k := 1;
while k <= n do
if a[k] = 0
then begin
// Удалить k-й элемент массива
end
else k := k + 1
В этом алгоритме важно учесть, что переход к следующему элементу массива (k := k + 1) необходим только в случае, если текущий элемент не нулевой и его удалять не нужно.
k := n;
while k >= 1 do begin
if a[k] = 0
then begin
// Удалить k-й элемент массива
end;
k := k - 1
end;
В этом алгоритме переход к предыдущему элементу массива осуществляем не зависимо от того, удаляем ли мы его или нет.