Pagini recente » Cod sursa (job #3308772) | Cod sursa (job #3308769) | Cod sursa (job #3319310) | Cod sursa (job #3307674) | Cod sursa (job #3319309)
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
double a[305][305], x[305];
int n, m, i, j, k;
int main()
{
fin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m+1; j++)
fin>>a[i][j]; //determinantul
for(int i=1; i<n; i++)//linia cu care scad
for(int j=i+1; j<=n; j++)//linia de unde scad
{
if(a[i][i])
{
float coef=a[j][i]/a[i][i];
for(int k=i; k<=m+1; k++)
a[j][k]-=a[i][k]*coef;
}
}
for(int i=1; i<=n; i++)
{
bool ok=true;
for(int j=1; j<=m; j++)
if(a[i][j])
{
ok=false;
break;
}
if(a[i][m+1]!=0 && ok==true)
{
fout<<"Imposibil";
return 0;
}
}
double sum=0;
int last=n;
while(last)
{
bool ok=false;
for(int i=1; i<=m; i++)
if(a[last][i])
{
ok=true;
break;
}
if(ok==true)
break;
last--;
}
for(i=1; i<=m; i++)
if(i<m && a[last][i])
{
x[i]=1;
sum+=a[last][i];
}
x[m]=(a[last][m+1]-sum)/a[last][m];
for(i=last-1; i>=1; i--)
{
int ind;
sum=0;
for(j=m; j>=1; j--)
{
if(a[i][j])
{
sum+=a[i][j]*x[j];
ind=j;
}
}
x[ind]=(a[i][m+1]-sum)/a[i][ind];
}
for(i=1; i<=m; i++)
fout<<fixed<<setprecision(8)<<x[i]<<" ";
return 0;
}