TURBO PASCAL

Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

Вставка и удаление элементов двумерного массива

Вставка строки

Мы уже рассматривали такие действия для одномерных массивов. Обобщим для двумерных.

Пример 12

Вставить строку из нулей после строки с номером k.

Решение

Для решения этой задачи необходимо:

  1. Первые k строк оставить без изменения.
  2. Все строки после k-й сдвинуть на одну назад, это лучше начать с последней строки и идти до (k+1)-й.
  3. Элементы строки k+1 присвоить заданное значение.

Кроме того, необходимо изменить размерность массива. Так как мы вставляем строку, то число строк будет на одну больше:

Const n = 5; m = 7;
Type dmyarray = Array[1..n+1, 1..m] Of Integer;
Var A : dmyarray;

Теперь опишем процедуру вставки:

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 присваиваем элемент этого же столбца, но из предыдущей строки}
End;

Так как число строк меняется, то процедуру Print надо изменить, она должна выводить данное количество строк, начиная с первой:

Procedure Print1(n1: Integer; x: dmyarray);
Var i, j : Integer;
Begin
For i:=1 To n1 Do
Begin
For j:=1 To m Do Write(x[i,j]:4);
Writeln;
End;
End

Часть основной программы будет такой:

Begin
Init(A);
Print(n,A);
Writeln('Введите номер строки, после которой вставляем');
Readln(k);
Insert(k,A);
Print(n+1,A);
Readln;
End.

Примечания:

  1. Если необходимо вставить после строки, удовлетворяющей некоторому условию, то надо лишь найти её номер и задача сводится к решению первого примера.
  2. Если надо вставлять после всех строк с заданным условием, то надо увеличить размерность по строкам, и если строка удовлетворяет условию, то к ней применять вставку. При этом надо заметить, что лучше просматривать строки с последней и ввести счётчик вставленных строк.
  3. Вставка перед строкой с данным номером изменится только тем, что сдвигать назад надо не с (k+1)-й строки, а с k-й.
  4. Если надо вставлять столбцы, то размерность увеличивается для столбцов, а всё остальное практически не меняется: надо сдвинуть столбцы назад и на данное место записать новый столбец.

Пример 13

Удалить строку с номером 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;

Примечания:

  1. Задачу об удалении строки с заданным условием можно решить этим же способом, достаточно только найти её номер, а в случае отсутствия такой строки можно просто сообщить об этом и закончить программу.
  2. Ещё одну задачу можно решить, используя данную процедуру - удаление всех строк, которые отвечают некоторым свойствам - просматриваем строки от последней до первой, если строка удовлетворяет требованиям, то удаляем её и переходим к следующей, иначе сразу переходим. Для эффективного вывода надо ввести счётчик, который учитывает количество удалённых строк, а при выводе изменённого массива передаём процедуре Print1 значение n-k, где k - это счётчик.

    Содержание

 

На главную страницу
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz