Читайте также:
|
|
Алгоритм решения достаточно простой. Указывается номер удаляемой строки - k, а затем все остальные строки, расположенные "ниже" последовательно перемещаются на одну строку "вверх".
Этот процесс аналогичен перемещению элементов в одномерном массиве, с которым мы уже встречались. Надо лишь заметить, что при организации цикла перемещения строк, не обязательно указывать вторые индексы элементов, а вполне достаточно выполнить следующий цикл:
for i:= k to n - 1 do a[i]:= a[i + 1];
Здесь k - номер удаляемой строки. Как видите, вторые индексы массива a[i, j] не указываются и этого достаточно, чтобы выполнялось перемещение строк целиком.
Процедура удаления заданной строки из массива и вывод нового массива на экран:
Procedure distance_line(n, m, k: integer; var a: t);
Var
i, j: integer;
Begin
for i:= k to n - 1 do a[i]:= a[i+1];
writeln('Новый массив без ', k, '-й строки ');
for i:= 1 to n - 1 do
Begin
for j:= 1 to m do write(a[i, j]:6, ' ');
writeln
End
end;
Формирование двумерного массива с помощью функции случайных чисел.
Ввод номера удаляемой строки. Последовательное перемещение строк. Вывод нового массива на экран.
Программа
Program Problem6a;
Const
n = 5; m = 6;
Type
s = array [1..m] of integer;
t = array [1..n] of s;
Var
a: t;
k: integer;
{----------------------------------------------------------------------------------------}
Procedure create_two(n, m: integer; var a: t);
Var
i, j: integer;
Begin
writeln('Заданный двумерный массив целых чисел');
randomize;
for i:= 1 to n do
Begin
for j:= 1 to m do
Begin
a[i, j]:= random(201) - 100;
write(a[i, j]:6, ' ')
End;
writeln
End
End;
{----------------------------------------------------------------------------------------}
Procedure distance_line(n, m, k: integer; var a: t);
Var
i, j: integer;
Begin
for i:= k to n - 1 do a[i]:= a[i + 1];
writeln('Новый массив без ', k, '-й строки ');
for i:= 1 to n - 1 do
Begin
for j:= 1 to m do write(a[i, j]:6, ' ');
writeln
End
End;
{----------------------------------------------------------------------------------------}
Begin
create_two(n, m, a);
write('Укажите номер строки, для удаления ');
readln(k);
distance_line(n, m, k, a)
End.
Для решения примера (б) требуется немногим больше. Во-первых, при описании массива следует учесть, что в новом массиве будет на 1 столбец больше, т.е. в каждой строке будет больше на одни элемент, а значит, описывая элементы строки надо записать:
Type
s = array [1..m+1] of integer;
так как будет новый столбец, то и его надо описать:
f = array [1..n] of integer;
таким образом, полностью раздел описаний должен быть таким:
Const
n = 5; m = 6;
Type
s = array [1..m+1] of integer;
t = array [1..n] of s;
f = array [1..n] of integer;
Var
a: t;
c: f;
i, j, k: integer;
Далее следует создать не только двумерный массив, но и новый столбец для вставки. Это можно сделать с помощью функций случайных чисел.
После этого необходимо указать то место в массиве, а точнее говоря, тот столбец, куда будет вставляется новый.
"Передвинуть" все остальные столбцы на 1 к концу, "влево".
И, последнее, вставить заданный столбец на указанное место.
Мы более подробно остановимся на перемещении столбцов и вставке нового столбца.
В отличие от перемещения строк, для перемещения столбцов нужно организовать двойной цикл, с указанием индексов перемещаемых элементов:
write('Введите номер столбца, куда вставляется новый ');
readln(k);
for i:= 1 to n do
for j:= m + 1 downto k + 1 do a[i, j]:= a[i, j-1];
Для вставки нового столбца, также необходим цикл:
{Вставка нового столбца}
writeln('Массив с новым ', k, '-м столбцом');
for i:= 1 to n do a[i, k]:= c[i]; здесь c[i] - новый столбец элементов.
Процедура вставки нового столбца в заданный двумерный массив будет следующей:
Procedure insert_column(n, m, k: integer; c: f; var a: t);
Var
i, j: integer;
Begin
Перемещение столбцов в конец для освобождения места}
for i:= 1 to n do
for j:= m + 1 downto k + 1 do a[i, j]:= a[i, j-1];
{Вставка нового столбца}
writeln('Массив с новым ', k, '-м столбцом');
for i:= 1 to n do a[i, k]:= c[i];
for i:= 1 to n do
Begin
for j:= 1 to m + 1 do write(a[i, j]:6, ' ');
writeln
End
End;
Дата добавления: 2015-07-11; просмотров: 70 | Нарушение авторских прав