Pagini recente » Cod sursa (job #650637) | Cod sursa (job #1218293) | Cod sursa (job #3248240) | Cod sursa (job #1418660) | Cod sursa (job #675653)
Cod sursa(job #675653)
#include <fstream>
#include <iomanip>
#define NMAx 310
#define EPS 0.000000001
#define nonZero(a) ((a)<-EPS||EPS<(a))
using namespace std;
int n,m;
double A[NMAx][NMAx],sol[NMAx];
void citire() {
int i,j;
ifstream in("gauss.in");
in>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m+1;j++)
in>>A[i][j];
in.close();
}
int main() {
citire();
int i,j,k,p,x,y;
for(i=1,j=1;(i<=n&&j<=m);i++,j++) {
for(k=i;k<=n;k++)
if(nonZero(A[k][j]))
break;
if(k==n+1)
continue;
if(k!=i)
for(p=1;p<=m+1;p++)
swap(A[i][p],A[k][p]);
for(p=j+1;p<=m+1;p++)
A[i][p]/=A[i][j];
A[i][j]=1;
for(x=i+1;x<=n;x++) {
for(y=j+1;y<=m+1;y++)
A[x][y]-=A[i][y]*A[x][j];
A[x][j]=0;
}
}
for(i=n;i>=1;i--)
for(j=1;j<=m+1;j++)
if(nonZero(A[i][j])) {
if(j==m+1)
i=0;
else {
sol[j]=A[i][m+1];
for(k=j+1;k<=m;k++)
sol[j]-=sol[k]*A[i][k];
}
break;
}
ofstream out("gauss.out");
if(i==-1)
out<<"Imposibil";
else
for(i=1;i<=m;i++)
out<<fixed<<setprecision(11)<<sol[i]<<' ';
out<<'\n';
out.close();
return 0;
}