30/09/2018, 16:06

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<<"
	";
        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<<"	Ma Tran A khong kha nghich
";
        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;
        }
    }
}
Nguyễn Minh Dũng viết 18:13 ngày 30/09/2018

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

Sáng Béo viết 18:09 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:17 ngày 30/09/2018

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.

Sáng Béo viết 18:17 ngày 30/09/2018

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

Đỗ Trung Quân viết 18:08 ngày 30/09/2018

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 =))

Sáng Béo viết 18:09 ngày 30/09/2018

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

Đỗ Trung Quân viết 18:20 ngày 30/09/2018

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 …

Sáng Béo viết 18:06 ngày 30/09/2018

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

Bài liên quan
0