Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.77 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class matrix{
  6. private:
  7.     int n,m;
  8.     double **mx;
  9.     double dt;
  10. public:
  11.     matrix(){
  12.         this->mx = NULL;
  13.     }
  14.     matrix(int N,int M,double** MX){
  15.         n=N; m=M;
  16.         mx = new double * [n];
  17.         for (int i=0;i<n;i++){
  18.             mx[i] = new double [m];
  19.             for (int j=0;j<m;j++)
  20.                 mx[i][j] = MX[i][j];
  21.         }
  22.     }
  23.     matrix(const matrix* cp){
  24.         this->n = cp->n;
  25.         this->m = cp->m;
  26.         mx = new double * [n];
  27.         for (int i=0;i<n;i++)
  28.             {
  29.                 mx[i] = new double [m];
  30.                 for (int j=0;j<m;j++)
  31.                     mx[i][j] = cp->mx[i][j];
  32.             }
  33.     }
  34.     ~matrix(){
  35.         this->clear();
  36.     }
  37.     double calcMinor (int i,int j){
  38.         if (n==m&&i<n&&j<m&&i>=0&&j>=0){
  39.             double ** buf;
  40.             buf = new double *[n-1];
  41.             for (int q=0;q<n-1;q++)
  42.                 buf[q] = new double [m-1];
  43.  
  44.         }
  45.         return 0;
  46.     }
  47.     void calcDet(){
  48.         if (m==n)
  49.             dt=det (n,mx);
  50.     }
  51.     void showDet(){
  52.         cout << this->dt;
  53.     }
  54.     void showMatrix(){
  55.         for (int i=0;i<n;i++){
  56.             for (int j=0;j<m;j++) cout << mx[i][j] <<" ";
  57.             cout << endl;
  58.         }
  59.     }
  60.     int pow(int a,int b){
  61.         int q=a;
  62.         for (int i=0;i<b-1;i++){
  63.         a*=q;
  64.         }
  65.         return a;
  66.     }
  67.     double det(int N,double** A){ // N-размерность матрицы, A-собственно матрица
  68.         double sum=0;
  69.         if (N==1) return A[0][0];
  70.         else
  71.         if(N!=2)
  72.             for(int i=0;i<N;i++){ //Разложение по первой строке
  73.                 sum+=pow((-1),(i+2))*A[0][i]*det(N-1,minor(0,i,N,A));
  74.             }
  75.         else
  76.         sum=A[0][0]*A[N-1][N-1]-A[N-1][0]*A[0][N-1];
  77.         return sum;
  78.     }
  79.     double** minor(int z,int x,int N, double** A){
  80.             double **C = new double*[N-1];
  81.                 for(int i=0;i<N-1;i++)
  82.                     C[i]=new double[N-1];
  83.                 for(int h=0,i=0; i<N-1;i++,h++){
  84.                 if(i==z) h++;
  85.                 for(int k=0,j=0;j<N-1;j++,k++){
  86.                     if(k==x) k++;
  87.                     C[i][j]=A[h][k];
  88.                 }
  89.             }
  90.         return C;
  91.     }
  92.     void clear(){
  93.         for (int i=0;i<n;i++)
  94.             delete [] mx[i];
  95.         delete [] mx;
  96.     }
  97. };
  98.  
  99. int main()
  100. {
  101.     double ** mas;
  102.     mas = new double * [2];
  103.     mas[0] = new double[2];
  104.     mas[1] = new double[2];
  105.     mas[0][0]=1;
  106.     mas[0][1]=2;
  107.     mas[1][0]=3;
  108.     mas[1][1]=4;
  109.     matrix A(2,2,mas);
  110.     A.calcDet();
  111.     A.showDet();
  112.     //A.showMatrix();
  113.     //cout << "Hello world!" << endl;
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement