ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »