Tìm nghịch đảo của ma trận

E làm như này nhưng chạy bị sai, e sửa mãi mà ko đc. các a chỉ giúp e với ạ.

void inMaTran(float **p, int x, int y)
{
    for(int i=0; i<x; i++)
    {
        cout<<"\n\t";
        for(int j=0; j<y; j++) cout<<setw(5)<<p[i][j]<<" ";
    }
    cout<<endl;
    float dinhThuc(float **a,int m, int n)
    {
        if(m==n)
        {
            float det=1.0;
            //Tao ma tran B lay gia tri cua ma tran A
            float **b=new float*[m];
            for(int i=0; i<m; i++) b[i]=new float[n];
            for(int i=0; i<m; i++)
                for(int j=0; j<n; j++)
                    b[i][j]=a[i][j];
            //Dua ma tran ve ma tran tam giac tren
            int i=0;
            for(i=0; i<m-1; i++)
            {
                if(b[i][i]==0)
                    for(int k=i+1; k<m; k++)
                    {
                        bool c=0;
                        if(b[k][i]!=0)
                        {
                            for(int j=0; j<n; j++)
                            {
                                float t=b[i][j];
                                b[i][j]=b[k][j];
                                b[k][j]=t;
                            }
                            c=1;
                            break;
                        }
                        if(c) break;
                    }
                for(int k=i+1; k<m; k++)
                {
                    float tl=b[k][i]/b[i][i];
                    for(int j=0; j<n; j++)
                        b[k][j]-=b[i][j]*tl;
                }
            }
            //Tinh dinh thuc bang tich cac phan tu tren duong cheo chinh
            for(int i=0; i<n; i++) det*=b[i][i];

            for(int i=0; i<n; i++) delete[] b[i];
            delete[] b;
            return det;
        }
        else return 0;
    }
    //Tinh tung phan tu cua ma tran phu hop
    float phuHop(float **b, float det, int x, int y)
    {
        float **p=new float*[m-1];
        for(int i=0; i<m-1; i++) p[i]=new float[n-1];
        for(int i=0; i<x-1; i++)
        {
            for(int j=0; j<y-1; j++)
                p[i][j]=b[i][j];
            for(int j=y; j<n-1; j++)
                p[i][j]=b[i+1][j];
        }
        for(int i=x; i<m-1; i++)
        {
            for(int j=0; j<y-1; j++)
                p[i][j]=b[i][j+1];
            for(int j=y; j<n-1; j++)
                p[i][j]=b[i+1][j+1];
        }
        float pTu=(pow(-1,x+y)*dinhThuc(p,m-1,n-1))/det;
        for(int i=0; i<m-1; i++) delete[] p[i];
        delete[] p;
        return pTu;
    }
    void nghichDao()
    {
        if(dinhThuc(a,m,n)==0) cout<<"\tMa Tran A khong kha nghich\n";
        else
        {
            float **b=new float*[m];
            for(int i=0; i<m; i++) b[i]=new float[n];
            for(int i=0; i<m; i++)
                for(int j=0; j<n; j++)
                    b[i][j]=phuHop(a,dinhThuc(a,m,n),i,j);
            cout<<"Ma tran nghich dao cua ma tran A la:";
            inMaTran(b,m,n);
            for(int i=0; i<m; i++) delete[] b[i];
            delete[] b;
        }
    }
}
1 Like

:frowning: Ma trận học từ năm 2 tới giờ 6 năm rồi. Thua :frowning:

1 Like

hụ hụ, e làm mãi mà vẫn ra kết quả sai. :frowning:

Bỏ qua phần code, em nói phần em muốn làm là gì, và lỗi cụ thể đi, chứ nếu em hỏi tìm nghịch đảo ma trận thì cũng giống như giờ anh hỏi em cách tính thuế thu nhập cá nhân vậy.

1 Like

ở đây có các bước a ơi:

Không thấy ai vào giúp bạn. Bạn thử debug từng dòng code của bạn xem sao? Máy mình không code đc nên cũng thua =))

1 Like

để e thử. hì
e vẫn chưa biết cách vận dụng debug lắm. :smile:

1 Like

Bạn dùng công cụ nào. Chỉ cần lên youtube hay google gõ cách debug c++ trong + tên công cụ. Nếu không thấy bạn có thể search bằng từ khóa tiếng anh. How to debug c++ in …

1 Like

cách debug thì e biết rồi, nhưng e ko biết bước làm đúng hay sai thôi ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?