Поменять столбцы матрицы местами

Задача

В числовой матрице поменять местами два столбца, т. е. все элементы одного столбца поставить на соответствующие им позиции другого, а его элементы второго переместить в первый.

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

Столбец матрицы определяется вторым индексом. Поэтому в цикле следует перебирать строки матрицы, т.е. переменная-счетчик будет использоваться в качестве первого индекса двумерного массива.

В каждой строке менять местами элементы с номерами указанных столбцов. От итерации к итерации они не меняются. Обмен можно производить через третью переменную.

Пусть номера столбцов, которые следует поменять местами, задаются путем ввода значений в момент выполнения программы.

Если в языке программирования индексация массивов начинается с нуля, а столбцы указываются, исходя из их фактического положения в матрице (начиная с 1), то следует из переменных, в которых записаны номера столбцов, вычесть единицу перед их использованием в цикле.

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

const
    N = 3; M = 6;
var
    arr: array[1..N,1..M] of byte;
    i,j,a,b,buff: byte;
begin
    randomize;
    for i:=1 to N do begin
        for j:=1 to M do begin
            arr[i,j] := random(4);
            write(arr[i,j]:3);
        end;
        writeln;
    end;
    write('Какие столбцы поменять местами: ');
    readln(a,b);
    for i:=1 to N do begin
        buff := arr[i,a];
        arr[i,a] := arr[i,b];
        arr[i,b] := buff;
    end;
    for i:=1 to N do begin
        for j:=1 to M do
            write(arr[i,j]:3);
        writeln;
    end;
end.

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

  2  0  2  1  1  2
  2  1  1  1  0  2
  3  3  1  2  3  2
Какие столбцы поменять местами: 2 6
  2  2  2  1  1  0
  2  2  1  1  0  1
  3  2  1  2  3  3

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

#include <stdio.h>
#define M 10
#define N 5
main() {
    int a[N][M];
    int i, j, n1, n2, ch;
    srand(time(NULL));
    for (i=0; i<N; i++) {
        for (j=0; j<M; j++) {
            a[i][j] = rand() % 10;
            printf("%5d", a[i][j]);
        }
        printf("\n");
    }
    printf("Поменять столбцы: ");
    scanf("%d",&n1);
    scanf("%d",&n2);
    for (i=0; i<N; i++) {
        ch = a[i][n1-1];
        a[i][n1-1] = a[i][n2-1];
        a[i][n2-1] = ch;
    }
    for (i=0; i<N; i++) {
        for (j=0; j<M; j++) {
            printf("%5d", a[i][j]);
        }
        printf("\n");
    }
}

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

    0    0    5    1    4    1    8    8    5    3
    8    0    5    8    4    3    0    6    0    8
    3    2    1    4    9    8    6    6    2    7
    7    2    7    2    6    4    6    4    2    1
    9    3    1    7    1    8    0    4    6    0
Поменять столбцы: 7 8
    0    0    5    1    4    1    8    8    5    3
    8    0    5    8    4    3    6    0    0    8
    3    2    1    4    9    8    6    6    2    7
    7    2    7    2    6    4    4    6    2    1
    9    3    1    7    1    8    4    0    6    0

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

from random import random
M = 10
N = 5
a = []
for i in range(N):
    b = []
    for j in range(M):
        b.append(round(random()*2))
    a.append(b)
    print(b)
 
c1 = int(input("Один столбец: ")) - 1
c2 = int(input("Другой столбец: ")) - 1

for i in range(N):
    a[i][c1], a[i][c2] = a[i][c2], a[i][c1]
    print(a[i])

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

[2, 1, 2, 2, 1, 0, 2, 1, 0, 1]
[1, 1, 1, 1, 1, 1, 2, 2, 2, 1]
[1, 1, 0, 1, 1, 1, 2, 0, 0, 1]
[0, 0, 0, 2, 0, 0, 1, 2, 1, 2]
[1, 0, 0, 1, 2, 0, 2, 1, 1, 0]
Один столбец: 3
Другой столбец: 10
[2, 1, 1, 2, 1, 0, 2, 1, 0, 2]
[1, 1, 1, 1, 1, 1, 2, 2, 2, 1]
[1, 1, 1, 1, 1, 1, 2, 0, 0, 0]
[0, 0, 2, 2, 0, 0, 1, 2, 1, 0]
[1, 0, 0, 1, 2, 0, 2, 1, 1, 0]

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

алг поменять столбцы местами
нач
  цел M = 6, N = 4
  цел таб a[1:N,1:M]
  цел i, j, c1, c2, b

  нц для i от 1 до N
    нц для j от 1 до M
      a[i,j] := int(rand(0,10))
      вывод a[i,j]:3
    кц
    вывод нс
  кц

  ввод c1
  ввод c2

  нц для i от 1 до N
    b := a[i,c1]
    a[i,c1] := a[i,c2]
    a[i,c2] := b
  кц

  нц для i от 1 до N
    нц для j от 1 до M
      вывод a[i,j]:3
    кц
    вывод нс
  кц
кон

Пример(ы) выполнения программы на языке КуМир

  4  7  6  9  3  8
  1  5  3  4  5  6
  3  3  9  9  5  0
  1  2  1  5  7  7
1
6
  8  7  6  9  3  4
  6  5  3  4  5  1
  0  3  9  9  5  3
  7  2  1  5  7  1

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

M = 8
N = 3
dim a(N,M)
for i = 0 to N-1
        for j=0 to M-1
                a[i,j] = int(rand*10)
                print a[i,j] + "     ";
        next j
        print
next i
 
input c1
input c2

for i=0 to N-1
        buff = a[i,c1-1]
        a[i,c1-1] = a[i,c2-1]
        a[i,c2-1] = buff
next i

for i = 0 to N-1
        for j=0 to M-1
                print a[i,j] + "     ";
        next j
        print
next i

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

0     7     0     1     3     8     3     8    
0     9     4     1     7     5     9     7    
2     3     4     6     4     0     1     6    
3
7
0     7     3     1     3     8     0     8    
0     9     9     1     7     5     4     7    
2     3     1     6     4     0     4     6  

Тема

Матрицы

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

Простой

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