Cod sursa(job #1677485)
Utilizator | Data | 6 aprilie 2016 16:50:53 | |
---|---|---|---|
Problema | Algoritmul lui Gauss | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.51 kb |
#include <cstdio>
#include <iostream>
using namespace std;
double d[310][310],x[310];
int n,m,ok;
bool schimba(int a,int b)
{
int i,k,j;
for(i=a+1; i<n; ++i)
if(d[i][b])
break;
k=i;
if(k==n)
return 0;
for(j=b; j<=n; ++j)
swap(d[i][j],d[a][j]);
return 1;
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d%d",&n,&m);
int i,j,k;
if(n<m)
printf("Imposibil\n");
else
{
ok=1;
for(i=0; i<n; ++i)
for(j=0; j<=m; ++j)
scanf("%lf",&d[i][j]);
for(i=0; i<n; ++i)
{
if(!d[i][i])
{
ok=schimba(i,j);
if(!ok)
{
printf("Imposibil");
break;
}
}
for(k=i+1; k<n; ++k)
{
for(j=i+1; j<=n; ++j)
d[k][j]=d[k][j]-(double)d[i][j]*(double)d[k][i]/d[i][i];
}
for(j=n; j>=i; --j)
d[i][j]/=d[i][i];
}
if(ok)
for(i=n-1; i>=0; --i)
{
x[i]=d[i][n];
for(j=n-1; j>i; --j)
x[i]-=x[j]*d[i][j];
}
if(ok)
for(i=0; i<n; ++i)
printf("%.10lf ",x[i]);
}
}