Конспект лекций по программированию для начинающих. Гладков В.П. - 183 стр.

UptoLike

Составители: 

185
begin r:=a[i,i-k]; a[i,i-k]:=a[i-k,i]; a[i-k,i]:=r end.
Упражнение. Установите, какие задачи решают приведенные фрагменты:
а) for k:=1 to n-1 do
for j:=1 to n-k do
begin r:=a[k+j,j]; a[k+j,j]:=a[j,k+j]; a[j,k+j]:=r end;
б) for i:=n-i+j to n do
for j:=1 to n-i+j do
begin r:=a[i,j]; a[i,j]:=a[j,i]; a[j,i]:=r end.
Пример 11.41. Задан двумерный массив n·n. Поменять местами строку с
номером k и столбец с номером p этого массива.
Решение 1. Задача просто решается при k=p. Например, при n=3, k=p=2 и
исходном массиве:
1 2 3
4 5 6
7 8 9.
Для получения ответа меняем элементы 2 и 4, 8 и 6, 5 остается на своем месте.
Получаем ответ:
1 4 3
2 5 6
7 6 9.
Однако при k<>p возникают трудности с элементом, стоящим на пересечении
строки k и столбца p. Если применить тот же алгоритм для n=3, k=2, p=3 к тому же
исходному массиву, то меняются местами
элементы 4 и 3, 5 и 6, 5 и 9, что
приводит к неверному ответу: в строке появился элемент 9, которого не было в
исходной строке:
1 2 4
3 6 9
7 8 9.
Для преодоления этой проблемы можно применить такой прием:
1) переставить строку k на место строки p:
1 2 3
7 8 9
4 5 6.
2) поменять местами строку p и столбец p. Сейчас при таком обмене
трудностей не возникнет:
1 2 4
7 8 5
3 9 6.
3) переставим строки k и p,
получим ответ:
1 2 4
3 9 6
7 8 5.
Соответствующий фрагмент на Паскале приводится ниже:
                                      185

      begin r:=a[i,i-k]; a[i,i-k]:=a[i-k,i]; a[i-k,i]:=r end.
   Упражнение. Установите, какие задачи решают приведенные фрагменты:
   а) for k:=1 to n-1 do
              for j:=1 to n-k do
              begin r:=a[k+j,j]; a[k+j,j]:=a[j,k+j]; a[j,k+j]:=r end;
   б) for i:=n-i+j to n do
              for j:=1 to n-i+j do
              begin r:=a[i,j]; a[i,j]:=a[j,i]; a[j,i]:=r end.
   Пример 11.41. Задан двумерный массив n·n. Поменять местами строку с
номером k и столбец с номером p этого массива.
   Решение 1. Задача просто решается при k=p. Например, при n=3, k=p=2 и
исходном массиве:
       123
       456
       7 8 9.
   Для получения ответа меняем элементы 2 и 4, 8 и 6, 5 остается на своем месте.
Получаем ответ:
       143
       256
       7 6 9.
   Однако при k<>p возникают трудности с элементом, стоящим на пересечении
строки k и столбца p. Если применить тот же алгоритм для n=3, k=2, p=3 к тому же
исходному массиву, то меняются местами элементы 4 и 3, 5 и 6, 5 и 9, что
приводит к неверному ответу: в строке появился элемент 9, которого не было в
исходной строке:
       124
       369
       7 8 9.
   Для преодоления этой проблемы можно применить такой прием:
   1) переставить строку k на место строки p:
       123
       789
       4 5 6.
   2) поменять местами строку p и столбец p. Сейчас при таком обмене
трудностей не возникнет:
       124
       785
       3 9 6.



   3) переставим строки k и p, получим ответ:
       124
       396
       7 8 5.
   Соответствующий фрагмент на Паскале приводится ниже: