Ми вже розглядали такі дії для одновимірних масивів. Узагальнимо для двовимірних.
Вставити рядок з нулів після рядка з номером k.
Для вирішення цього завдання необхідно:
- Перші k рядків залишити без зміни.
- Всі рядки після k-й зрушити на одну назад, це краще почати з останнього рядка і йти до (k + 1) -й.
- Елементи рядка k + 1 привласнити задане значення.
Крім того, необхідно змінити розмірність масиву. Так як ми вставляємо рядок, то число рядків буде на одну більше:
Тепер опишемо процедуру вставки:
Так як число рядків змінюється, то процедуру Print треба змінити, вона повинна виводити дане кількість рядків, починаючи з першої:
Частина основної програми буде такою:
- Якщо необхідно вставити після рядка, що задовольняє деякому умовою, то треба лише знайти її номер і завдання зводиться до вирішення першого прикладу.
- Якщо треба вставляти після всіх рядків із заданим умовою, то треба збільшити розмірність по рядках, і якщо рядок задовольняє умові, то до неї застосовувати вставку. При цьому треба зауважити, що краще переглядати рядки з останньої і ввести лічильник вставлених рядків.
- Вставка перед рядком з даними номером зміниться тільки тим, що зрушувати назад треба не з (k + 1) -го рядка, а з k-й.
- Якщо треба вставляти стовпці, то розмірність збільшується для стовпців, а все інше практично не змінюється: треба зрушити стовпці назад і на дане місце записати новий стовпець.
Видалити рядок з номером k.
Для того, щоб видалити рядок з номером k, необхідно:
Зрушити всі рядки, починаючи з даної, на одну вгору.
Останній рядок "обнулити", тобто всіх елементів останнього рядка привласнити значення 0.
Опис масивів залишимо колишнє (для розмірності n * m). Також в програмі будемо використовувати процедуру виведення Print1 з попереднього параграфа. Будемо виводити на екран спочатку все рядки, а другий раз, після видалення, на одну менше. Тепер опишемо процедуру видалення рядка з даним номером:
Procedure Delete (k1: Integer; Var x: dmyarray);
Var i, j. Integer;
Begin
For i: = k1 To n-1 Do
For j: = 1 To m Do
x [i, j]: = x [i + 1, j];
For j: = 1 To m Do x [n, j]: = 0
End;
- Завдання про видалення рядка з заданим умовою можна вирішити цим же способом, досить тільки знайти її номер, а в разі відсутності такого рядка можна просто повідомити про це і закінчити програму.
- Ще одне завдання можна вирішити, використовуючи дану процедуру - видалення всіх рядків, які відповідають деяким властивостям - переглядаємо рядки від останньої до першої, якщо рядок задовольняє вимогам, то видаляємо її і переходимо до наступної, інакше відразу переходимо. Для ефективного виведення треба ввести лічильник, який враховує кількість вилучених рядків, а при виведенні зміненого масиву передаємо процедурі Print1 значення n-k. де k - це лічильник.