Для того чтобы заполнить массив указанным образом, надо вывести правило заполнения. В данном случае правило будет таким: если ряд нечетный (то есть когда номер строки − нечетное число), то А[i, j]=(i-1)*m+j, иначе (то есть когда строка четная) A[i, j]=i*m-j+1. В соответствии с этим правилом составляем процедуру заполнения массива:
Program Example_121;
Procedure Fill (Varx: dmyarray);
Var i, j: Integer;
Begin
For i:=1 To n Do
For j:=1 To m Do
If i Mod 2=1 Then x[i, j]:=(i-1)*m+j
Else x[i, j]:=i*m-j+1;
End;
Вставка и удаление элементов
Вставка строки
Мы уже рассматривали операции вставки для одномерных массивов. Обобщим их для двухмерных.
Пример
Вставить строку из нулей после строки с номером k.
Решение
Для решения этой задачи необходимо:
1. Первые k строк оставить без изменения.
2. Все строки после k−й сдвинуть на одну вниз, это лучше начать с последней строки и идти до (k+1)−й.
3. Присвоить значения элементам (k+1) строки.
Кроме того, необходимо обратить внимание на размерность массива. Так как мы вставляем строку, то необходимо иметь одну строку "в запасе".
Program Example_122;
Const n=5; m:=7;
Type dmyarray=Array[1..n+1,1..m]
Of Integer;
Var A: dmyarray; k:Integer;
Теперь опишем процедуру вставки:
Procedure Insert(k1: Integer;
Var x: dmyarray);
Var i, j: Integer;
Begin
For i:=n Downto k1+1 Do
For j:=1 To m Do x[i+1, j]:=x[i, j];
{Элементу столбца с номером j присваиваем
элемент этого же столбца, но из
предыдущей строки}
For j:=1 То m Do x[k1+1, j]:=0;
End;
Так как число строк меняется, то процедуру Print надо изменить. Она должна выводить указанное количество строк, начиная с первой: