Pagini recente » Cod sursa (job #323092) | Cod sursa (job #2495333) | Cod sursa (job #1818667) | Cod sursa (job #2499087) | Cod sursa (job #2487284)
#include <bits/stdc++.h>
#define dim 310
#define err 0.000000001
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
double a[dim][dim];
double X[dim];
int n,m,i,j,t,k,sol;
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m+1;j++)
fin>>a[i][j];
i=1;j=1;
while(i<=n&&j<=m){
/// gasesc prima coloana diferita de 0
for(k=i;k<=n;k++)
if(a[k][j]!=0)
break;
if(k==n+1){
//// toate 0
j++;
continue;
}
if(k!=i){
//// fac swap linii pentru ca linia curenta are 0 la x
swap(a[i],a[k]);
}
/// impart prin a[i][j] toata ecuatia
for(t=j+1;t<=m+1;t++){
a[i][t]/=a[i][j];
}
a[i][j]=1;
for(k=i+1;k<=n;k++){
for(t=j+1;t<=m+1;t++){
/// inmultesc linia cu -x si adun liniile
a[k][t] += (-a[k][j])*a[i][t];
}
a[k][j]=0; /// 0 sub diagonala principala
}
i++;
j++;
}
for(i=n;i>=1;i--){
for(j=1;j<=m+1;j++)
if(a[i][j]<-err||a[i][j]>err)
break;
if(j==m+2){
continue;
}
if(j==m+1){
sol=-1;
break;
}
X[j]=a[i][m+1];
for(t=j+1;t<=m;t++)
X[j]-=a[i][t]*X[t];
}
if(sol==-1){
fout<<"Imposibil";
return 0;
}
for(i=1;i<=m;i++)
fout<<fixed<<setprecision(10)<<X[i]<<" ";
}