Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Matrix.h"
- #include <conio.h>
- #include <iostream>
- using namespace std;
- #define _DEBUG_
- void ReadData( FILE* fin, double ** pM, double* b, int nDim );
- int main( int argc, char* argv[] )
- {
- if( argc != 2 )
- {
- printf( "Zla liczba parametrow\nProgram nalezy odpalic z 2 parametrami <nazwa pliku do odczytu>\n" );
- _getch();
- return 1;
- }
- FILE* plik = fopen( argv[1], "r" );
- if( !plik ) // sprawdzwenie czy otwarto plik
- {
- printf( "nie otwarto pliku\n" );
- return 1;
- }
- int nSize;
- fscanf( plik, "%d", &nSize );
- #ifdef _DEBUG_
- printf( "Rozmiar %d\n\n", nSize );
- #endif
- double** pTab = NULL;
- double* pTab1 = ( double*)malloc( nSize *sizeof( double ) );;
- if( !CreateMatrix( &pTab, nSize ) || !pTab1 ) //sprawdzenie czy dobrze zaalokowano
- {
- printf( "ERROR\n" );
- return 1;
- }
- memset( pTab1, 0, nSize*nSize * sizeof( double ) );
- ReadData( plik, pTab, pTab1, nSize );
- fclose( plik );
- #ifdef _DEBUG_
- PrintMatrix( pTab, nSize );
- double* k = pTab1;
- printf("\nWyrazy wolne: \n");
- for( int i = 0; i < nSize; i++, k++ )
- printf( "%0.3lf ", *k );
- #endif
- double det = Det( pTab, nSize );
- #ifdef _DEBUG_
- printf( "\n\ndet= %0.3lf\n\n", det );
- #endif
- if( fabs( det ) < 1e-14) // wartosc bezwzgledna
- {
- printf( "wyznacznik = 0; nie da sie policzyc macierzy odwrotnej\n" );
- return 0;
- }
- double** pInv = NULL;
- if( !CreateMatrix( &pInv, nSize ))
- {
- printf( "ERROR" );
- return 1;
- }
- InverseMatrix( pInv, pTab, nSize, det );
- #ifdef _DEBUG_
- printf( "MACIERZ ODWROTNA\n" );
- PrintMatrix( pInv, nSize );
- cout << "\n\n";
- #endif
- double* pRes = ( double* )calloc( nSize, sizeof( double ) );
- if( !pRes )
- {
- printf( "ERROR" );
- return 1;
- }
- LayoutEqu( pInv, pTab1, pRes, nSize );
- double* l = pRes;
- #ifdef _DEBUG_
- printf( "ROZWIAZANIA ROWANIAN\n" );
- for( int i = 0; i < nSize; i++, l++) printf( "X%d= %0.3lf\n", i, *l );
- #endif
- DeleteMatrix( &pTab, nSize );
- DeleteMatrix( &pInv, nSize );
- free(pTab1);
- free(pRes);
- _getch();
- return 0;
- }
- //----------------------------------------------------------------------------------------------
- void ReadData( FILE* fin, double ** pM, double* b, int nDim )
- {
- //double* x = b; //wskaznik do 1 elem wektora wyrazow wolnych
- for( int i = 0; i < nDim; i++ )
- {
- double* v = *pM++; //wskaznik do 1 el macierzy
- for( int j = 0; j < nDim; j++, v++) fscanf( fin, "%lf", v );
- fscanf( fin, "%lf", b++ );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement