ЮГ
Юлия Глазихина

C++. Как можно транспонировать матрицу NxM из одномерного массива?

Вот сам код программы. Задача была вывести из одномерного массива длинной в 30 символов матрицу, выводящуюся на экран в виде "змейки", финальный результат транспонировать и поставить 2 матрицы друг на против друга. Не знаю как сделать последний пункт. Как в данном случае сделать транспонирование? ! Заранее спасибо=)

"#include "stdafx.h"
#include

#include

const int Length = 30;

int main()

{

int m = 5;

int n = 6;

int targetArray[Length];

int i = 0;

int j = 0;

int k;

int mA = 0, mB = 0, mC = 0, mD = 0; // отступы

// процесс заполнения массива

if(m * n != Length)

{

printf("Error! \n");

return 1;

}

printf("\n");

k = 0;

while(k < Length)

{

//цикл вправо

for(i = mD; i < n - mB; i++, k++)

{

targetArray[j * n + i] = k;

}

mA++;

i--;

if(k >= Length) break;

//Цикл Вниз

for(j = mA; j < m - mC ; j++, k++)

{

targetArray[j * n + i] = k;

}

j--;

mB++;

if(k >= Length) break;

//цикл влево

for(i = n - mB - 1; i >= mD; i--, k++)

{

targetArray[j * n + i] = k;

}

i++;

mC++;

if(k >= Length) break;

//Цикл Вверх

for(j = m - mC - 1; j >= mA; j--, k++)

{

targetArray[j * n + i] = k;

}

j++;

mD++;

}

//вывод массива в виде матрицы

for(j = 0; j < m; j++)

{

for(i = 0; i < n; i++)

{

printf(" %d \t", targetArray[j * n + i]);

}

printf("\n\n");

}

scanf_s("\n");

return 0;

}
"

ВА
Володя Андрианов

У этого вопроса есть другая версия 🙂

int transponedArray[Length];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
transponedArray[j * m + i] = targetArray[i * n + j];
}
}

Похожие вопросы
программирование (одномерные массивы)
Обработка одномерных массивов.
Паскаль. Одномерные массивы.
Помогите транспонировать матрицу в паскале
Удаление элементов из одномерного массива. C++
Паскаль одномерные массивы)
C#: Задание значения элемента одномерного и двумерного массивов
ПОМОГИТЕ В С# В одномерном массиве
Одномерные массивы (с++)
Транспонировать матрицу