Консультация № 175718
29.12.2009, 16:20
33.95 руб.
0 1 1
Здравствуйте.
Уважаемые эксперты, нужна помощь в решении задачи:
1.Написать и протестировать функцию для транспонирования матрицы.
Заранее спасибо!!!

Обсуждение

Неизвестный
29.12.2009, 17:30
общий
это ответ
Здравствуйте, aller719.
Программа. С++. Тестировал MS VS 2008.
Код:
#include <locale>
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>

using namespace std;

// Ф-я для вывода матриц
template<class _Ty,size_t _Rows,size_t _Cols>
void printMatrix(const char* const message,const _Ty (&matrix)[_Rows][_Cols])
{
cout<<message<<endl;
for(size_t i=0;i<_Rows;++i)
{
for(size_t j=0;j<_Cols;++j)
{
cout<<setw(4)<<matrix[i][j]<<' ';
}
cout<<endl;
}
}

// Ф-я для транспонирования матриц
template<class _Ty,size_t _Rows,size_t _Cols>
void transposeMatrix(const _Ty (&srcMatrix)[_Rows][_Cols],_Ty (&dstMatrix)[_Cols][_Rows])
{
if(reinterpret_cast<const void*>(srcMatrix)==reinterpret_cast<const void*>(dstMatrix))
{
for(size_t i=1;i<_Rows;++i)
{
for(size_t j=0;j<i;++j)
{
swap(dstMatrix[i][j],dstMatrix[j][i]);
}
}
}
else
{
for(size_t i=0;i<_Rows;++i)
{
for(size_t j=0;j<_Cols;++j)
{
dstMatrix[j][i]=srcMatrix[i][j];
}
}
}
}

int main()
{
locale::global(locale(""));
srand(static_cast<unsigned int>(time(0)));

// Размерность матрицы
const size_t ROWS=4,COLS=5;
// Исходная и транспонированная матрицы
int matrix[ROWS][COLS],matrixT[COLS][ROWS];

// Заполним матрицу случайными числами
for(size_t i=0;i<ROWS;++i)
{
for(size_t j=0;j<COLS;++j)
{
matrix[i][j]=rand()%50;
}
}

// Распечатаем матрицу
printMatrix("Исходная матрица:",matrix);

// Транспонируем
transposeMatrix(matrix,matrixT);

// Распечатаем транспонированную
printMatrix("Транспонированная матрица:",matrixT);

system("PAUSE");
return 0;
}

Пример вывода:
Код:
Исходная матрица:
1 9 39 24 46
4 23 44 8 1
24 4 25 28 48
24 40 26 28 16
Транспонированная матрица:
1 4 24 24
9 23 4 40
39 44 25 26
24 8 28 28
46 1 48 16
Форма ответа