====== Matrix ======
Work with matrices.
===== Read matrix =====
static int** readMatrix2D(istream &is, int w, int h )
{
int i, j;
int ** matrix;
matrix = new int * [h];
for ( i = 0; i < h; i ++ )
{
matrix[i] = new int [w];
for ( j =0; j < w; j ++ )
{
cin >> matrix[i][j];
}
}
return ( matrix );
}
===== Alloc matrix =====
static int ** allocMatrix2D(int rows, int cols ){
int** matrix;
matrix = new int * [ rows ];
for (int i = 0; i < rows; i ++ ){
matrix[i] = new int [cols];
}
return ( matrix );
}
===== Copy matrix =====
static int ** copyMatrix2D(int ** matrix, int ** matrix2, int rows, int cols){
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
matrix[i][j] =matrix2[i][j];
}
}
return(matrix2);
}
===== Enlarge matrix =====
static int ** enlargeMatrix(int ** matrix, int rows, int cols, int newRows, int newCols){
int **newMatrix;
newMatrix=allocMatrix(newRows,newCols);
copyMatrix(matrix,newMatrix,rows,cols);
return (newMatrix);
}
===== Free matrix =====
static void freeMatrix2D(int ** matrix, int rows ){
for (int i = 0; i < rows; i ++ ){
delete [] matrix[i];
}
delete [] matrix;
}
===== Transpose matrix =====
static int ** transposeMatrix( int ** mat, int w, int h )
{
int i, j;
int ** res;
res = new int * [w]; // src w -> dst h
for ( i = 0; i < w; i ++ )
{
res[i] = new int [h];
for ( j = 0; j < h; j ++ )
res[i][j] = mat[j][i];
}
return res;
}
===== Upper triangle =====
static int upperTriangle ( int ** mat, int w, int h )
{
int i, j, k;
int tmp, mul;
for ( i = 0; i < h; i ++ )
{
if ( mat[i][i] == 0 )
{
for ( j = i + 1; j < h; j ++ )
if ( mat[j][i] != 0 )
break;
if ( j >= h ) return ( TRIANG_ERR );
for ( k = 0; k < w; k ++ )
{
tmp = mat[i][k];
mat[i][k] = mat[j][k];
mat[j][k] = tmp;
}
}
for ( j = i + 1; j < h; j ++ )
{
mul = mat[j][i];
for ( k = 0; k < w; k ++ )
mat[j][k] = mat[j][k] * mat[i][i] - mul * mat[i][k];
}
}
return ( TRIANG_OK );
}
===== Print matrix =====
static void printMatrix2D(int ** matrix, int w, int h )
{
int i, j;
for ( i = 0; i < h; i ++ )
{
if ( i == 0 )
cout << "/";
else if ( i == h-1)
cout << "\\";
else
cout << "|";
for ( j = 0; j < w; j ++ )
{
if ( j ) cout << " ";
cout << setw ( 7 ) << matrix[i][j];
}
if ( i == 0 )
cout << "\\";
else if ( i == h-1)
cout << "/";
else
cout << "|";
cout << endl;
}
cout << endl;
}