Обмен значений главной и побочной диагоналей квадратной матрицы

Задача

В квадратной матрице 10x10 обменять значения элементов в каждой строке, расположенные на главной и побочной диагоналях.

Пояснение к задаче и алгоритм решения

Диагонали можно выделить лишь в квадратной матрице (когда количество строк равно количеству столбцов). Главная диагональ идет из верхнего левого угла в правый нижний, а побочная - из правого верхнего в левый нижний. Таким образом элементы главной диагонали имеют равные индексы строки и столбца, а у побочной - противоположные.

Поскольку обмен происходит в одной строке, то значения подлежащие обмену имеют следующие индексы:

  • у элемента главной диагонали - первый и второй индексы равны друг другу (i = j),
  • у элемента побочной диагонали - первый индекс равен i, а второй N-j+1 (при индексации с единицы) или N-1-j (при индексации с нуля).

При проходе по матрице обмен значений происходит лишь в том случае, когда i = j.

Исходный код на языке программирования Pascal

const
    N = 10;
var
    arr: array[1..N,1..N] of byte;
    i,j,a: byte;
begin
    randomize;
    for i:=1 to N do begin
        for j:=1 to N do begin
            arr[i,j] := random(100);
            write(arr[i,j]:4);
        end;
        writeln;
    end;
    writeln;
    for i:=1 to N do
        for j:=1 to N do
            if i = j then begin
                a := arr[i,j];
                arr[i,j] := arr[i,N-j+1];
                arr[i,N-j+1] := a;
            end;
 
   for i:=1 to N do begin
        for j:=1 to N do
            write(arr[i,j]:4);
        writeln;
    end;
end.

Особенности решения на языке программирования Pascal

Пример(ы) выполнения программы на языке Pascal:

  79   9  84   8  78  80  57  26   0   8
  54  20  58  31  85  85   9  99  94  18
  32  42  56  43  64  41  76  38  68   2
  98  15  27  11  28  52   9  76  19  79
  51  18  44  89  97  18  22  64  12   4
   3  58  43  70  95  68  79  82  33  32
  33  91  66  32  43   6  43  97  62   6
  57  11  78  58  24   8  79  30  71  77
  81  16  99  59  55  95  51  12   3  20
  93  90  55  57   7  83  99  66  94  51
 
   8   9  84   8  78  80  57  26   0  79
  54  94  58  31  85  85   9  99  20  18
  32  42  38  43  64  41  76  56  68   2
  98  15  27   9  28  52  11  76  19  79
  51  18  44  89  18  97  22  64  12   4
   3  58  43  70  68  95  79  82  33  32
  33  91  66  43  43   6  32  97  62   6
  57  11  30  58  24   8  79  78  71  77
  81   3  99  59  55  95  51  12  16  20
  51  90  55  57   7  83  99  66  94  93

Исходный код на языке программирования C

#include <stdio.h>
#define N 10
main() {
    int a[N][N], i, j, b;
    srand(time(NULL));
    for (i=0; i<N; i++) {
        for (j=0; j<N; j++) {
            a[i][j] = rand()%100;
            printf("%4d", a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
            if (i == j) {
                b = a[i][j];
                a[i][j] = a[i][N-1-j];
                a[i][N-1-j] = b;
            }
    for (i=0; i<N; i++) {
        for (j=0; j<N; j++) {
            printf("%4d", a[i][j]);
        }
        printf("\n");
    }
}

Исходный код на языке программирования Python

from random import random
N = 10
a = []
for i in range(N):
    z = []
    for j in range(N):
        n = int(random() * 100)
        z.append(n)
        print("%4d" % n, end='')
    print()
    a.append(z)
print()
 
for i in range(N):
    for j in range(N):
        if i==j:
            b = a[i][j]
            a[i][j] = a[i][N-1-j]
            a[i][N-1-j] = b
 
for i in range(N):
    for j in range(N):
        print("%4d" % a[i][j], end='')
    print()

Исходный код на языке программирования КуМир

алг обмен диагоналей
нач
  цел N=10
  цел таб a[1:N,1:N]
  цел i, j, b
  нц для i от 1 до N
    нц для j от 1 до N
      a[i,j] := int(rand(10,100))
      вывод a[i,j], " "
    кц
    вывод нс
  кц
  вывод нс
 
  нц для i от 1 до N
    нц для j от 1 до N
      если i = j то
        b := a[i,j]
        a[i,j] := a[i,N-j+1]
        a[i,N-j+1] := b
      все
    кц
  кц
 
  нц для i от 1 до N
    нц для j от 1 до N
      вывод a[i,j], " "
    кц
    вывод нс
  кц
кон

Исходный код на языке программирования Basic

N = 10
dim a(N,N)
for i=0 to N-1
        for j=0 to N-1
                a[i,j] = int(rand*90)+10
                print a[i,j]+" ";
        next j
        print
next i
print
 
for i=0 to N-1
        for j=0 to N-1
                if i=j then
                        b = a[i,j]
                        a[i,j] = a[i,N-1-j]
                        a[i,N-1-j] = b
                endif
        next j
next i
 
for i=0 to N-1
        for j=0 to N-1
                print a[i,j]+" ";
        next j
        print
next i

Тема

Матрицы

Уровень сложности

Средний

Дата публикации