Advertisement
everloongg

Untitled

Nov 20th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include "Matrix.h"
  2. #include <conio.h>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. #define _DEBUG_
  8.  
  9. void ReadData( FILE* fin, double ** pM, double* b, int nDim );
  10.  
  11. int main( int argc, char* argv[] )
  12. {
  13.     if( argc != 2 )
  14.     {
  15.         printf( "Zla liczba parametrow\nProgram nalezy odpalic z 2 parametrami <nazwa pliku do odczytu>\n" );
  16.         _getch();
  17.         return 1;
  18.     }
  19.  
  20.     FILE* plik = fopen( argv[1], "r" );
  21.     if( !plik ) // sprawdzwenie czy otwarto plik
  22.     {
  23.         printf( "nie otwarto pliku\n" );
  24.         return 1;
  25.     }
  26.  
  27.     int nSize;
  28.     fscanf( plik, "%d", &nSize );
  29. #ifdef _DEBUG_
  30.     printf( "Rozmiar %d\n\n", nSize );
  31. #endif
  32.  
  33.     double** pTab = NULL;
  34.     double* pTab1 = ( double*)malloc( nSize *sizeof( double ) );;
  35.     if( !CreateMatrix( &pTab, nSize ) || !pTab1 )                     //sprawdzenie czy dobrze zaalokowano
  36.     {
  37.         printf( "ERROR\n" );
  38.         return 1;
  39.     }
  40.     memset( pTab1, 0, nSize*nSize * sizeof( double ) );
  41.  
  42.     ReadData( plik, pTab, pTab1, nSize );
  43.     fclose( plik );
  44.  
  45. #ifdef _DEBUG_
  46.     PrintMatrix( pTab, nSize );
  47.     double* k = pTab1;
  48.     printf("\nWyrazy wolne: \n");
  49.         for( int i = 0; i < nSize; i++, k++ )    
  50.         printf( "%0.3lf ", *k );
  51. #endif
  52.  
  53.     double det = Det( pTab, nSize );
  54. #ifdef _DEBUG_
  55.     printf( "\n\ndet= %0.3lf\n\n", det );
  56.  
  57. #endif
  58.  
  59.     if( fabs( det ) < 1e-14)    //  wartosc bezwzgledna
  60.     {
  61.         printf( "wyznacznik = 0; nie da sie policzyc macierzy odwrotnej\n" );
  62.         return 0;
  63.     }
  64.  
  65.     double** pInv = NULL;
  66.    
  67.     if( !CreateMatrix( &pInv, nSize ))
  68.     {
  69.         printf( "ERROR" );
  70.         return 1;
  71.     }
  72.  
  73.     InverseMatrix( pInv, pTab, nSize, det );
  74.  
  75. #ifdef _DEBUG_
  76.     printf( "MACIERZ ODWROTNA\n" );
  77.     PrintMatrix( pInv, nSize );
  78.     cout << "\n\n";
  79. #endif
  80.  
  81.     double* pRes = ( double* )calloc( nSize, sizeof( double ) );
  82.     if( !pRes )
  83.     {
  84.         printf( "ERROR" );
  85.         return 1;
  86.     }
  87.    
  88.  
  89.     LayoutEqu( pInv, pTab1, pRes, nSize );
  90.     double* l = pRes;
  91. #ifdef _DEBUG_
  92.     printf( "ROZWIAZANIA ROWANIAN\n" );
  93.     for( int i = 0; i < nSize; i++, l++) printf( "X%d= %0.3lf\n", i, *l );
  94. #endif
  95.  
  96.  
  97.     DeleteMatrix( &pTab, nSize );
  98.     DeleteMatrix( &pInv, nSize );
  99.  
  100.     free(pTab1);
  101.     free(pRes);
  102.    
  103.     _getch();
  104.     return 0;
  105. }
  106.  
  107.  
  108. //----------------------------------------------------------------------------------------------
  109. void ReadData( FILE* fin, double ** pM, double* b, int nDim )
  110. {
  111.  
  112.     //double* x = b;        //wskaznik do 1 elem wektora wyrazow wolnych
  113.     for( int i = 0; i < nDim; i++ )
  114.     {
  115.         double* v = *pM++;  //wskaznik do 1 el macierzy
  116.         for( int j = 0; j < nDim; j++, v++) fscanf( fin, "%lf", v );
  117.  
  118.         fscanf( fin, "%lf", b++ );
  119.  
  120.     }
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement