Pagini recente » Cod sursa (job #385250) | Cod sursa (job #3150944) | Clasament vs_10_smile_again | Cod sursa (job #2105414) | Cod sursa (job #1721364)
#include <cstdio>
#define MAXN 300
#define EPS 0.0000000001
using namespace std;
double mat[MAXN][MAXN+1], sol[MAXN];
inline double myabs(double val){
if(val<0)
return -val;
return val;
}
int main()
{
FILE *fin, *fout;
double aux;
int n, m, i, j, k, x, imp;
fin=fopen("gauss.in", "r");
fscanf(fin, "%d%d", &n, &m);
for(i=0; i<n; i++)
for(j=0; j<=m; j++)
fscanf(fin, "%lf", &mat[i][j]);
fclose(fin);
i=j=0;
while(i<n && j<m){
for(k=i; k<n && myabs(mat[k][j])<EPS; k++);
if(k>=n)
++j;
else{
if(i<k)
for(x=0; x<=m; x++){
aux=mat[i][x];
mat[i][x]=mat[k][x];
mat[k][x]=aux;
}
for(k=j+1; k<=m; k++)
mat[i][k]/=mat[i][j];
mat[i][j]=1;
for(k=i+1; k<n; k++){
for(x=j+1; x<=m; x++)
mat[k][x]-=mat[k][j]*mat[i][x];
mat[k][j]=0;
}
++i; ++j;
}
}
imp=0;
for(i=n-1; i>=0 && imp==0; i--)
for(j=0; j<=m && imp==0; j++)
if(myabs(mat[i][j])>EPS){
if(j==m)
imp=1;
sol[j]=mat[i][m];
for(k=j+1; k<m; k++)
sol[j]-=mat[i][k]*sol[k];
j=m+1;
}
fout=fopen("gauss.out", "w");
if(imp)
fprintf(fout, "Imposibil");
else
for(i=0; i<m; i++)
fprintf(fout, "%lf ", sol[i]);
fprintf(fout, "\n");
fclose(fout);
return 0;
}