ИНФОРМАТИКА · 10 КЛАСС
Алгоритмы и массивы · Интерактивный конспект

§ 7. Преобразование элементов массива

Разберём изменение элементов, обмен, удаление и вставку. Будем наблюдать каждый сдвиг, чтобы не потерять данные.

Попробовать на модели ↓
Разбираемся в теме

Основные пункты параграфа

1

Изменение по условию

Каждый исходный элемент должен попадать в предусмотренную ветвь преобразования один раз.

НАБЛЮДАЙТЕ И ПРОБУЙТЕ

Изменение по условию

Меняйте данные и выполняйте шаги. Цвет выделяет текущие элементы; подписи объясняют результат. Сброс возвращает исходный опыт.

Пусть положительные элементы нужно удвоить, отрицательные увеличить на 5, а нули оставить. Используют if a[i] > 0 then … else if a[i] < 0 then … . Условия проверяются как взаимно исключающие ветви относительно исходного значения.

Если сначала прибавить 5 к отрицательному −3, получится 2. Независимая следующая проверка положительности может удвоить уже изменённое число и дать 4 вместо 2. Такой повторной обработки в условии задачи нет. Перед циклом полезно составить таблицу из отрицательного, нулевого и положительного примеров.

Главная мысль: Каждый исходный элемент должен попадать в предусмотренную ветвь преобразования один раз.
2

Обмен элементов

Временная переменная сохраняет значение, которое иначе было бы перезаписано.

НАБЛЮДАЙТЕ И ПРОБУЙТЕ

Обмен элементов

Меняйте данные и выполняйте шаги. Цвет выделяет текущие элементы; подписи объясняют результат. Сброс возвращает исходный опыт.

Для обмена a[i] и a[k] выполняют temp := a[i]; a[i] := a[k]; a[k] := temp. Первое значение сначала сохранено, поэтому обе записи не теряются. Два присваивания без temp сделали бы элементы одинаковыми. Если i=k, обмен допустим и ничего не меняет.

Чтобы поменять минимум с максимумом, сначала находят их индексы, затем выполняют обмен. При повторяющихся экстремумах нужно оговорить правило выбора — например, первые вхождения. Обмен меняет порядок, но сохраняет количество элементов и их набор.

temp := a[i];
a[i] := a[k];
a[k] := temp;
Главная мысль: Временная переменная сохраняет значение, которое иначе было бы перезаписано.
3

Удаление и сдвиг влево

Удаление из используемой части сдвигает последующие элементы влево и уменьшает n на 1.

НАБЛЮДАЙТЕ И ПРОБУЙТЕ

Удаление и сдвиг влево

Меняйте данные и выполняйте шаги. Цвет выделяет текущие элементы; подписи объясняют результат. Сброс возвращает исходный опыт.

Позиция удаления k должна лежать в 1..n. Выполняют a[i] := a[i+1] для i от k до n−1, затем n := n−1. Движение слева направо сохраняет ещё не скопированные значения справа. Физическая вместимость статического массива не меняется, а оставшаяся хвостовая ячейка больше не входит в данные.

Если удаляют все элементы с некоторым свойством, после удаления проверяют тот же индекс снова: туда сдвинулся новый элемент. Безусловный переход к следующему индексу пропустит соседние совпадения. Для [5,10,3] при удалении кратных 5 должны исчезнуть и 5, и 10.

{ 1 <= k <= n }
for i := k to n-1 do a[i] := a[i+1];
n := n-1;
Главная мысль: Удаление из используемой части сдвигает последующие элементы влево и уменьшает n на 1.
4

Вставка и сдвиг вправо

Вставка требует свободной ячейки и сдвига от конца к позиции вставки.

НАБЛЮДАЙТЕ И ПРОБУЙТЕ

Вставка и сдвиг вправо

Меняйте данные и выполняйте шаги. Цвет выделяет текущие элементы; подписи объясняют результат. Сброс возвращает исходный опыт.

Для вставки перед позицией k допустимо 1 ≤ k ≤ n+1; k=n+1 означает добавление в конец. До записи проверяют n < вместимость. Для i от n вниз до k выполняют a[i+1] := a[i], затем a[k] := x и n := n+1.

Обратное направление сохраняет исходные значения: сначала освобождают место справа. Сдвиг слева направо многократно скопировал бы одно перезаписанное значение. В пустой используемый массив можно вставить на позицию 1, а удалить из него нечего. Тренажёр показывает используемые ячейки и свободный остаток отдельно.

{ 0 <= n < CAP; 1 <= k <= n+1 }
for i := n downto k do a[i+1] := a[i];
a[k] := x;
n := n+1;
Главная мысль: Вставка требует свободной ячейки и сдвига от конца к позиции вставки.
Интерактивная практика

Исследуйте и примените

Проверьте модель на нескольких наборах данных, затем выполните самостоятельное задание.

НАБЛЮДАЙТЕ И ПРОБУЙТЕ

Лаборатория: проверьте свой вариант

Меняйте данные и выполняйте шаги. Цвет выделяет текущие элементы; подписи объясняют результат. Сброс возвращает исходный опыт.

Соберём главное

Шесть выводов

01

Каждый исходный элемент должен попадать в предусмотренную ветвь преобразования один раз.

02

Временная переменная сохраняет значение, которое иначе было бы перезаписано.

03

Удаление из используемой части сдвигает последующие элементы влево и уменьшает n на 1.

04

Вставка требует свободной ячейки и сдвига от конца к позиции вставки.

05

После удаления длина уменьшается, а вместимость статического массива сохраняется.

06

При вставке нужно проверить и позицию, и наличие свободного места.

Самопроверка

Тест: 10 вопросов

Один верный ответ. За ответ — 0,5 балла. Откройте и проверьте себя.

1. Что получится из −3 при правиле «отрицательное увеличить на 5»?

2. Как избежать повторной обработки новой положительной величины?

3. Зачем временная переменная при обмене?

4. Что делает обмен элемента с самим собой?

5. Куда сдвигают элементы при удалении?

6. В каком порядке выполняют сдвиг при удалении?

7. Что меняется после удаления?

8. В каком порядке сдвигают при вставке?

9. Какая позиция разрешена для добавления в конец?

10. Что проверить перед вставкой?

ВыводыТестВ началоВсе параграфы
↑

Загрузка прогресса…