计算行列式(C++)

利用等值变换,
将左下角元素化为0(若对角不为1元素下方元素为1交换两行.)
结果为主对角之积
计算行列式(C++)_第1张图片
源码:

#include
#include
using namespace std;
//By Vove.

class Determinant{

public:
    Determinant(){
        n=9;
        for(int i=0;i<9;i++)
            for(int j=0;j<9;j++)
                s[i][j]=0;

    }
    void Display();
    bool Cal_result();
    void Input();
    void Out_result();

private:
    int n;
    float s[9][9];
    float result;
};

int Find(float temp[9][9],int i,int n);
void Swap(float temp[9][9],int i,int j,int n);

int main(){
    cout<<"\t\t\t-------行列式计算--------"<while(1){
        Determinant D;
        D.Input();
        D.Cal_result();
        D.Out_result();
    }
    return 1;
}

void Determinant::Input(){
    cout<<"行列数:";
    cin>>n;
    cout<"输入行列式:"<for(int i=0;ifor(int j=0;jcin>>s[i][j];
        cout<<"原式:"<bool Determinant::Cal_result(){

    for(int i=0;i1;i++){
        if(s[i][i]){//对角线元素不为0
            if(s[i][i]!=1.0)
                if(int j=Find(s,i,n)){ Swap(s,i,j,n); Display();}
            for(int m=i+1;mif(s[m][i]){
                    float temp=-(s[m][i])/s[i][i];
                    for(int p=0;p//R(m)+tempRi
                        s[m][p]=s[m][p]+temp*s[i][p];
                    }
                    if(temp>0)
                        cout<<"R"<1<<"+"<"R"<1<<":"<else
                        cout<<"R"<1<"R"<1<<":"<else continue;
            }
        }

        else {//若对角线元素为0
            int m;
            for(m=i+1;m//
                if(s[m][i]){//使对角线元素非0
                    for(int p=0;p//Ri+Rm
                        s[i][p]=s[m][p]+s[i][p];
                    break;
                }
                else continue;
            }
            if(m==n){
                result=0;
                return true;
            }
            cout<<"R"<1<<"+"<<"R"<1<float sum=s[0][0];
    for(i=1;ireturn true;
}
int Find(float temp[9][9],int i,int n){
    for(int m=i+1;mif(temp[m][i]==1.0)
            return m;
        return 0;
}

void Swap(float temp[9][9],int i,int j,int n){
    cout<<"R"<1<<"<-->R"<1<for(int m=0;mvoid Determinant::Display(){
    for(int i=0;icout<<"|";
        for(int j=0;jcout<8)<cout<<"    |"<cout<void Determinant::Out_result(){
    cout<<"="<

你可能感兴趣的:(DIARY)