4.2.3. Обработка массива

Перестановки элементов в массиве

При перестановках элементы массива меняются местами друг с другом. Хотя их значения в результате перестановок и не изменяются, но изменяется порядок следования элементов в массиве.

Для выполнения перестановок обычно используется третья переменная, которая служит для временного хранения одного из элементов и играет роль буфера обмена.

Например, переставим местами первый и второй элементы массива а, используя для временного хранения переменную buf.

buf:=a[1]; а[1]:=а[2]; a[2]:=buf;

В случае перестановки строк матрицы необходимо переставить местами все элементы двух строк.

Например, при перестановке двух строк, скажем, первой и второй, не обязательно использовать в качестве буфера обмена целый массив. Одной переменной вполне достаточно, т. к. перестановки всех элементов строк выполняются по очереди.

for j:=1 to m do
  begin
    buf:= a[1,j]; a[1,j]:=a[2,j]; a[2,j]:=buf;
  end;

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

Листинг 4.4 содержит программу, которая формирует матрицу случайных чисел и транспонирует ее. |

Листинг 4.4. Программа транспонирования матрицы случайных чисел

const row=3; col=row;
var a: array[1..row,1..col] of integer;
  i,],buf: integer;
begin
  randomize; { инициализация датчика случайных чисел }
  writeln('Исходная матрица случайных чисел:');
  for i:= 1 to row do
    begin
      for j:= 1 to col do
        begin
          a[i,j]:=random(100);{ случайное значение элемента }
          write (a[i,j]:4); { вывод элемента массива на экран }
        end;
      writeln;
    end;
  { транспонирование матрицы }
  for i:=1 to row do { просмотр всех строк матрицы }
  { просмотр элементов в строке, расположенных выше главной диагонали }
    for j:=i+1 to col do
    { обмен элементов, симметричных относительно главной диагонали }
      begin
        buf:=a[i,j]; a[i,j]:=a[j,i]; a[j,i]:=buf;
      end;
  writeln('Результат транспонирования матрицы:');
  for i:= 1 to row do
    begin
      for j:= 1 to col do write(a[i,j]:4);
      writeln;
    end;
end.

 предыдущая         меню        вверх         следующая

Hosted by uCoz