ВУЗ:
Составители:
Рубрика:
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.
Соответствующий фрагмент на Паскале приводится ниже:
Страницы
- « первая
- ‹ предыдущая
- …
- 181
- 182
- 183
- 184
- 185
- …
- следующая ›
- последняя »
