Загрузка данных


#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

void Gauss(const vector<vector<double>> A, const vector<double> b, vector<double>& otv)
//A -                 n*n
//b -                          (n)
//otv -              (n)
{
  int n,i,j,k;
  double mom,mom1;
  vector<vector<double>> s;
  n=A.size();
  s.resize(n);
  for (i=0;i<n;i++)
      s[i].resize(n+1);
  for (i=0;i<n;i++){
      for (j=0;j<n;j++)
          s[i][j]=A[i][j];
      s[i][n]=b[i];
  }  
  for (k=0;k<n;k++){
      mom=s[k][k];
      i=k;
      for (j=k+1;j<n;j++)
          if (fabs(mom)<fabs(s[j][k])) {
              mom=s[j][k];
              i=j;
          }
      mom1=s[i][k];
      for (j=k;j<=n;j++){
          mom=s[i][j];
          s[i][j]=s[k][j];
          s[k][j]=mom/mom1;
      }
      for (i=k+1;i<n;i++){
          mom=-s[i][k];
          for (j=k+1;j<=n;j++)
              s[i][j]=s[k][j]*mom+s[i][j];
          s[i][k]=0.0;
      }
  }
  for (k=n-1;k>0;k--)
      for (i=k-1;i>=0;i--){
          s[i][n]=s[i][n]-s[k][n]*s[i][k];
          s[i][k]=0.0;
      }
  /*for (i=0;i<n;i++){ //                
      otv[i]=0;
      for (j=0;j<n;j++)
          otv[i]=otv[i]+m[i][j]*s[j][n];
  end;*/
  otv.resize(n);
  for (i=0;i<n;i++)
      otv[i]=s[i][n];
  for (i=0;i<n;i++)
      s[i].clear();
  s.clear();
}

void main()
{
  vector<vector<double>> m;
  vector<double> b,otv;
  int i;
  m.resize(3);
  for (i=0;i<3;i++)
    m[i].resize(3);
  b.resize(3);
    /*                      
  x+y=3
  2x-y+3z=9
  2y-z=1
       : x=1, y=2, z=3*/
  //                
  m[0][0]=1;
  m[0][1]=1;
  m[0][2]=0;
  b[0]=3;
  //                
  m[1][0]=2;
  m[1][1]=-1;
  m[1][2]=3;
  b[1]=9;
  //                
  m[2][0]=0;
  m[2][1]=2;
  m[2][2]=-1;
  b[2]=1;
  Gauss(m,b,otv);
  for (int i=0;i<otv.size();i++)
      cout<<otv[i]<<endl;
}