Pagini recente » Cod sursa (job #2430512) | Cod sursa (job #2801615) | Cod sursa (job #2680359) | Cod sursa (job #117932) | Cod sursa (job #1254055)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
const double EPS = 1e-9;
int n, m;
double a[304][304], x[304];
inline bool equal(const double x,const double y){
if(fabs(x-y)<EPS)
return 1;
return 0;
}
inline void Swap(int i1,int i2){
for(int j=1;j<=m+1;++j)
swap(a[i1][j],a[i2][j]);
}
inline void Write(){
for(int i=1;i<=n;++i){
for(int j=1;j<=m+1;++j)
cout<<a[i][j]<<" ";
printf("\n");
}
printf("\n");
}
int main(){
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%i %i\n",&n,&m);
for(int i=1;i<=n;++i)
for(int j=1;j<=m+1;++j)
scanf("%lf",&a[i][j]);
int i = 1,j = 1;
for( ;i <= n && j <= m;){
int ind = i;
for(;ind <= n;++ind)
if(!equal(a[ind][j],0))
break;
if(ind == n+1){
++j;
continue;
}
if(ind != i)
Swap(i,ind);
for(int p = j+1;p <= m+1;++p)
a[i][p] /= a[i][j];
a[i][j] = 1;
for(int k=i+1;k<=n;++k){
for(int p=j+1;p<=m+1;++p)
a[k][p] -= a[k][j]*a[i][p];
a[k][j] = 0;
}
++i,++j;
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m+1;++j)
printf("%lf ",a[i][j]);
printf("\n");
}
for(int i = n; i>0; --i)
for(int j = 1; j <= m+1; ++j)
if(!equal(a[i][j],0))
{
if(j == m+1)
{
printf("Imposibil\n");
return 0;
}
x[j] = a[i][m+1];
for(int k = j+1; k <= m; ++k)
x[j] -= x[k] * a[i][k];
break;
}
for(int i=1;i<=m;++i)
printf("%.7lf ",x[i]);
printf("\n");
return 0;
}