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 ); 
 }
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;    
 } 
programming/c-cpp/matrix.txt · Last modified: 2018-06-21 19:48 (external edit)
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0