Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- double Det( double** pTab, int nSize )
- {
- double d = 0;
- double** pTab2 = ( double** )malloc( nSize * sizeof( double ) );
- if( !CreateMatrix( &pTab2, nSize ))
- {
- printf( "ERROR" );
- }
- //*pTab = (double**)malloc(nSize * sizeof(double*));
- memset(*pTab, 0, nSize * sizeof(double*));
- if( nSize == 1 ) return **pTab;
- if( nSize == 2 )
- return ( **pTab * pTab[1][1]) - (pTab[0][1] * pTab[1][0]);
- int znak = 1;
- double* v = *pTab; //wskaznik na 1 el macierzy
- for( int j = 0; j < nSize; j++, v++ )
- {
- Complement( pTab, pTab2, 0, j, nSize );
- d += znak * *v * Det( pTab2, nSize - 1 );
- znak = -znak;
- }
- return d;
- }
- //===========================
- void Complement( double** pTab, double** pTabI, int nRow, int nCol, int nDim )
- {
- for( int i = 0; i < nDim; i++, pTab++ ) //i - wiersze
- {
- double* v = *pTab;
- double* l = *pTabI;
- if( i == nRow ) continue; //pomijamy 1 wiersz, pozniej 2 itd, w zaleznosci od petli for z i
- for( int j = 0; j < nDim; j++, v++ ) //j kolumny
- {
- if( j == nCol ) continue; //i 1 kolumne, pozniej 2 itd,petla for z j
- *l++ = *v;
- }
- *pTabI++;
- }
- }
- //=================================
- int CreateMatrix( double*** pTab, int nSize )
- {
- *pTab = ( double** )malloc( nSize*sizeof( double* ) );
- if( !*pTab ) return 0; // sprawdzenie
- memset( *pTab, 0, nSize * sizeof( double* ) );
- double** c = *pTab;
- for( int i = 0; i < nSize; i++, c++ )
- {
- *c = ( double* )malloc( nSize*sizeof( double ) );
- if( !*c ) return 0; // sprawedzenie
- memset( *c, 0, nSize * sizeof( double ) );
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement