2011年10月27日 星期四

C++ 高斯喬登


......................
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、寫寫程式,是個最近很忙碌的學生。

 

沒有留言:

張貼留言

請提供您寶貴的意見

熱門文章