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

UptoLike

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

184
imax:=1; jmax:=1; {предполагаем максимальным первый элемент}
for i:=1 to n do
for j:=1 to n do
if a[imax,jmax]<a[i, j]
then begin imax:=i; jmax:=j end.
Пример 11.38. Переставить строки и столбцы двумерного массива так, чтобы
его максимальный элемент оказался в левом верхнем углу.
Решение сводится:
1) к поиску индексов максимального элемента (пример 11.36);
2) к обмену местами первой строки и строки imax;
3) к обмену местами столбца 1 и столбца jmax. Шаги 2 и 3 можно поменять
местами без изменения результата.
Фрагмент программы приведен ниже:
{поиск индексов максимального элемента}
imax:=1; jmax:=1; {предполагаем максимальным первый элемент}
for i:=1 to n do
for j:=1 to n do
if a[imax,jmax]<a[i, j]
then begin imax:=i; jmax:=j end.
{обмен местами первой и imax строк}
for i:=1 to n do
begin r:=a[1,i]; a[1,i]:=a[imax,i]; a[imax,i]:=r end;
{обмен
местами первого и jmax столбцов}
for i:=1 to n do
begin r:=a[i,1]; a[i,1]:=a[i,jmax]; a[i,jmax]:=r end.
Пример 11.39. Транспонировать двумерный массив, т.е. переставить местами
его строки и столбцы. Например, для исходного массива:
1 2 3 получить: 1 4 7
4 5 6 2 5 8
7 8 9 3 6 9.
Решение. Из приведенного примера хорошо видно, что диагональные элементы
в результате обмена остаются на своих местах, обмениваются местами элементы,
расположенные симметрично относительно главной диагонали.
for i:=1 to n do {перебираем все строки массива}
for j:=1 to i-1 do {перебираем элементы до главной диагонали}
begin r:=a[i,j]; a[i,j]:=a[j,i]; a[j,i]:=r end.
Пример 11.40. Транспонировать двумерный массив, перебирая элементы
параллельно главной диагонали.
Решение. Для таких диагоналей справедливо равенство |i-j|=k. Нужно перебрать
элементы, расположенные ниже главной диагонали, обменяв их с симметричными
относительно главной диагонали элементами. Следовательно, k будет изменяться
от 1 до n-1. Номер строки для элементов, расположенных на диагонали,
параллельной главной, изменяется от k+1 до n, а номер столбца - от 1 до n-k. В теле
цикла меняем местами симметричные
элементы.
for k:=1 to n-1 do
for i:=k+1 to n do
                                       184

    imax:=1; jmax:=1; {предполагаем максимальным первый элемент}
    for i:=1 to n do
       for j:=1 to n do
               if a[imax,jmax]