Сьогодні | Разом | |
Відвідувань | 36 | 5273710 |
Авторізацій | 0 | 423086 |
Користувачів | 0 | 2728 |
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;В этом алгоритме переход к предыдущему элементу массива осуществляем не зависимо от того, удаляем ли мы его или нет.