Advertisement
everloongg

Untitled

Jan 2nd, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. double Det( double** pTab, int nSize )
  2. {
  3.     double d = 0;
  4.     double** pTab2 = ( double** )malloc( nSize * sizeof( double ) );
  5.     if( !CreateMatrix( &pTab2, nSize ))
  6.     {
  7.         printf( "ERROR" );
  8.     }
  9.     //*pTab = (double**)malloc(nSize * sizeof(double*));
  10.     memset(*pTab, 0, nSize * sizeof(double*));
  11.  
  12.     if( nSize == 1 ) return **pTab;
  13.     if( nSize == 2 )
  14.         return ( **pTab * pTab[1][1]) - (pTab[0][1] * pTab[1][0]);
  15.  
  16.     int znak = 1;
  17.     double* v = *pTab;      //wskaznik na 1 el macierzy
  18.     for( int j = 0; j < nSize; j++, v++ )
  19.     {
  20.         Complement( pTab, pTab2, 0, j, nSize );
  21.         d += znak * *v * Det( pTab2, nSize - 1 );
  22.         znak = -znak;
  23.     }
  24.  
  25.     return d;
  26. }
  27. //===========================
  28. void Complement( double** pTab, double** pTabI, int nRow, int nCol, int nDim )
  29. {
  30.     for( int i = 0; i < nDim; i++, pTab++ ) //i - wiersze
  31.     {
  32.         double* v = *pTab;
  33.         double* l = *pTabI;
  34.         if( i == nRow ) continue;       //pomijamy 1 wiersz, pozniej 2 itd, w zaleznosci od petli for z i
  35.  
  36.         for( int j = 0; j < nDim; j++, v++ )    //j kolumny
  37.         {
  38.  
  39.  
  40.             if( j == nCol ) continue;   //i 1 kolumne, pozniej 2 itd,petla for z j
  41.  
  42.             *l++ = *v;
  43.         }
  44.         *pTabI++;
  45.     }
  46.  
  47. }
  48. //=================================
  49. int CreateMatrix( double*** pTab, int nSize )
  50. {
  51.     *pTab = ( double** )malloc( nSize*sizeof( double* ) );         
  52.     if( !*pTab ) return 0;                                          //  sprawdzenie
  53.     memset( *pTab, 0, nSize * sizeof( double* ) );
  54.  
  55.     double** c = *pTab;
  56.     for( int i = 0; i < nSize; i++, c++ )
  57.     {
  58.         *c = ( double* )malloc( nSize*sizeof( double ) );
  59.         if( !*c ) return 0;                                         // sprawedzenie
  60.         memset( *c, 0, nSize * sizeof( double ) );
  61.     }
  62.  
  63.     return 1;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement