Записать матрицу в одномерный массив

Задача

Записать элементов прямоугольной матрицы в одномерный массив в порядке следования столбцов.

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

Размерность одномерного массива определяется произведением количества столбцов и строк матрицы. Так, если строк 3, а столбцов 4, то всего элементов в матрице 12. Следовательно, элементов в одномерном массиве должно быть также 12.

В программах ниже номера элементов одномерного массива (k) при его заполнении независимы от номеров строки (i) и столбца (j). Т.е. счетчик k увеличивается "вручную" при каждой записи элемента матрицы в одномерный массив. Возможно есть определенная зависимость между i и j с одной стороны и k - c другой.

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

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

const N = 3; M = 4;
var
    mtx: array[1..N,1..M] of byte;
    arr: array[1..N*M] of byte;
    i,j,k: byte;
begin
    randomize;
    for i:=1 to N do begin
        for j:=1 to M do begin
            mtx[i,j] := random(100);
            write(mtx[i,j]:3);
        end;
        writeln;
    end;
    writeln;
 
    k := 0;
    for j:=1 to M do
        for i:=1 to N do begin
            k := k + 1;
            arr[k] := mtx[i,j];
            write(arr[k]:3);
        end;
    writeln;
end.

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

 23 88 30  8
 99 55 40 89
 58  3 27 22

 23 99 58 88 55  3 30 40 27  8 89 22

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

#include <stdio.h>
#define N 3
#define M 4
main() {
    int mtx[N][M], arr[N*M], i, j, k;
    srand(time(NULL));
    for (i=0; i<N; i++) {
        for (j=0; j<M; j++) {
            mtx[i][j] = rand() % 100;
            printf("%3d", mtx[i][j]);
        }
        printf("\n");
    }
    printf("\n");
 
    k = -1;
    for (j=0; j<M; j++)
        for (i=0; i<N; i++) {
            k += 1;
            arr[k] = mtx[i][j];
            printf("%3d", arr[k]);
        }
    printf("\n");
}

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

from random import random
N = 3
M = 4
mtx = []
arr = [0] * N*M
 
for i in range(N):
    a = []
    for j in range(M):
        a.append(int(random()*100))
    mtx.append(a)
 
for i in range(N):
    for j in range(M):
        print("%3d" % mtx[i][j], end='')
    print()
print()
 
k = -1
for j in range(M):
    for i in range(N):
        k += 1
        arr[k] = mtx[i][j]
        print("%3d" % arr[k], end='')
print()

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

алг
нач
  цел N = 3
  цел M = 4
  целтаб mtx[1:N,1:M], arr[1:N*M]
  цел i, j, k
  нц для i от 1 до N
    нц для j от 1 до M
      mtx[i,j] := irnd(100)-1
      вывод mtx[i,j]:3
    кц
    вывод нс
  кц
  вывод нс
 
  k := 0
  нц для j от 1 до M
    нц для i от 1 до N
      k := k+1
      arr[k] := mtx[i,j]
      вывод arr[k]:3
    кц
  кц
кон

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

N = 3
M = 4
dim mtx(N,M)
dim arr(N*M)
for i=0 to N-1
        for j=0 to M-1
                mtx[i,j] = int(rand() * 100)
                print mtx[i,j] + " ";
        next j
        print
next i
print
 
k = 0
for j=0 to M-1
        for i=0 to N-1
                arr[k] = mtx[i,j]
                print arr[k] + " ";
        next i
next j
print

Тема

Матрицы

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

Простой

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