......................
void change(int x,int row,int y,double **a)
{
double tmp;
int i;
for(i=0;i<y;i++)
{
tmp=a[x][i];
a[x][i]=a[row][i];
a[row][i]=tmp;
}
}
void Leader(int h,int x,int y,double **a)
{
int row=0;
for(int i=x;i<h;i++)
if(a[i][x]!=0)
{
row=i;
break;
}
if(x!=row)
change(x,row,y,a);
}
int proof(int x,int y,double **a)
{
int l=0,k=0;
for(int i=0;i<y;i++)
{
if(a[x][i]==0)
k++;
}
if(k>=y - 1)
{
if((a[x][y-1])==0 )
l=1;
else l=2;
}
return l;
}
void Gauss(int h,int y,double **a)
{
int row=0;
int pl;
double tmp;
for(int k=0;k<h;k++,row++)
{
Leader(h,row,y,a);
if(a[k][row]!=1)
{
tmp=a[k][row];
for(int i=row;i<y;i++)
a[k][i] /=tmp;
}
for(int i=0;i<h;i++)
{
if(i==row)
continue;
if(a[i][row]!= 0)
{
tmp=-1*a[i][row];
for(int j=0;j<y;j++)
a[i][j]+= a[k][j]*tmp ;
}
}
for(int j=0 ;j<h;j++)
{
pl = proof(j,y,a);
if (pl != 0){
if(pl == 1){
cout<<"無限多組解\n";
k=h;
j=h;
}
else{
cout<<"無解\n";
k=h;
j=h;
}
}
}
cout<<"\n";
}
}
int main(int argc, char* argv[])
{
int h,y;
cout<<"資工四甲_497G0022_施宇懋"<<endl;
cout<<"請輸入矩陣維度:\t";
cin>>h;
y=h+1;
double **a;
a = new double *[h];
for(int i=0;i<h;i++)
a[i] = new double[y];
for(int i=0;i<h;i++)
for(int j=0;j<y;j++){
if(j!=y-1)
cout<<"輸入A"<<j+1<<":";
else cout<<"第"<<i+1<<"行=:";
cin>>a[i][j];
}
for(int i=0;i<h;i++){
for(int j=0;j<y;j++)
cout<<a[i][j]<<"\t";
cout<<"\n";
}
cout<<"計算結果:列矩陣梯形---------";
Gauss(h, y,a);
for(int i=0;i<h;i++){
for(int j=0;j<y;j++)
cout<<a[i][j]<<"\t";
cout<<"\n";
}
for(int i = 0; i < h; i++)
delete [] a[i];
delete [] a;
system("pause");
}
code 下載點
關於 小巴 | ||
出現在網路上的小小部落客,白天是隱身在某某科大的學生,一到晚上就會現身在傳說中的秘密工作室。對於3C和網路有高度的熱情,偶爾研究APP、寫寫程式,是個最近很忙碌的學生。 |
||
沒有留言:
張貼留言
請提供您寶貴的意見