【线性代数】行列式的阶

  1 //计算3阶及以下行列式
2 #include<iostream>
3 using namespace std;
4 int array_det[4][4]={0};
5
6
7 class reversed_order
8 {
9 //求逆序数
10 //默认逆序排序的标准序列为:由小到大
11 public :
12 int num(int newN);
13 private:
14 int array_Num[11],temp,numb,result;
15 };
16 int reversed_order::num(int newN)
17 {
18 temp=newN;
19 //将数字的每一位由低位到高位存入数组 注意数组是从低位到高位存入数组的
20 for(int i=0;temp!=0;i++)
21 {
22 array_Num[i]=temp%10;
23 temp=temp/10;
24 numb=i;//记录数组的终止地址 局部变量i省内存
25 }
26 //数组中存储的数字是从地位到高位存入数组的
27 for(int i=0;i<numb/2+1;i++)
28 {
29 temp=array_Num[numb-i];
30 array_Num[numb-i]=array_Num[i];
31 array_Num[i]=temp;
32 }
33 //计算逆序数
34 result=0;
35 for(int i=1;i<=numb;i++)
36 {
37 for(int j=0;j<i;j++)
38 {
39 if(array_Num[i]<array_Num[j])
40 {
41 result++;
42 }
43 }
44 }
45 return result;
46 }
47
48 class det
49 {
50 //行列式求解
51 public:
52 int return_result(int N);//N 行列式的阶数
53 private:
54 int result;
55 };
56 int det::return_result(int N)
57 {
58 int result=0;
59 if(1==N)
60 result=array_det[0][0];
61 else if(2==N)
62 {
63 result=array_det[0][0]*array_det[1][1]-array_det[0][1]*array_det[1][0];
64 }
65 else if(3==N)
66 {
67 result=array_det[0][0]*array_det[1][1]*array_det[2][2]+array_det[0][1]*array_det[1][2]*array_det[2][0]+array_det[1][0]*array_det[2][1]*array_det[0][2]-array_det[0][2]*array_det[1][1]*array_det[2][0]-array_det[1][2]*array_det[2][1]*array_det[0][0]-array_det[1][0]*array_det[0][1]*array_det[2][2];//普通算法
68 }
69 else
70 {
71 cout<<"非法的N 您正在尝试破坏该程序"<<endl;//由于在主程序里面已经过滤掉这种情况
72 }
73 return result;
74 }
75
76 class det1
77 {
78 //行列式高级算法
79 public:
80 int return_result(int N);
81 private:
82 int temp;
83 };
84 int det1::return_result(int N)
85 {
86 //行列式高级算法尚未完成
87 //类继承 没有掌握好~~~~
88 return 0;
89 }
90
91 int main()
92 {
93 while(1)
94 {
95 int select=0;
96 cout<<"请输入您要使用的算法"<<endl;
97 cout<<"普通算法请输入1"<<endl<<"高级算法请输入2"<<endl<<"退出程序请输入0"<<endl;
98 cin>>select;
99 if(1==select)
100 {
101 while(1)
102 {
103 bool flag=true;
104 int N;
105 cout<<"请输入行列式的阶数";
106 cout<<" 注:这是一个普通算法 所以请输入的阶数不要超过3"<<endl;
107 while(1)
108 {
109 cout<<"输入0重新选择算法或退出"<<endl;
110 cin>>N;
111 if(0==N)
112 flag=false;
113 if(N<=3 && N>=0)
114 break;
115 }
116 if(0==N && !flag) break;//退出程序
117 for(int i=0;i<N;i++)
118 for(int j=0;j<N;j++)
119 cin>>array_det[i][j];
120 det newdet;//实例化一个对象
121 cout<<"行列式的计算结果为:"<<newdet.return_result(N)<<endl;//输出结果
122 //system("pause");
123 }
124 }
125 else if(2==select)
126 {
127 cout<<"正在实现 敬请关注!"<<endl;
128 }
129 else if(0==select)
130 return 0;
131 else
132 cout<<"难道说您按错了键盘??"<<endl;
133 }
134 return 0;
135 }


posted @ 2011-11-15 13:45  VierAmt  阅读(511)  评论(0编辑  收藏  举报