Pagini recente » Cod sursa (job #637985) | Cod sursa (job #1389110) | Cod sursa (job #2472592) | Cod sursa (job #1042443) | Cod sursa (job #793359)
Cod sursa(job #793359)
#include<stdio.h>
#include<fstream>
using namespace std;
#define MAXN 303
#define EPS 0.0000001
double A[ MAXN ][ MAXN ], sol [ MAXN ];
int n, m, i, j, k, q, x;
double aux;
int main()
{
ifstream f("gauss.in");
f >> n >> m;
for(i = 1; i <= n; ++i)
for(j = 1; j <= m + 1; ++j)
f >> A[i][j];
f.close();
i = j = 1;
while(i <= n && j <= m)
{
x = i;
while(A[x][j] > -EPS && A[x][j] < EPS && x <= n)
++x;
if(x > n)
{
++j;
continue;
}
if(x != i)
for(k = 1; k <= m + 1; ++k)
aux = A[x][k], A[x][k] = A[i][k], A[i][k] = aux;
for(k = j + 1; k <= m + 1; ++k)
A[i][k] = (double) A[i][k] / A[i][j];
A[i][j] = 1;
for(q = i + 1; q <= n; ++q)
{
for(k = j + 1; k <= m + 1; ++k)
A[q][k] -= A[q][j] * A[i][k];
A[q][j] = 0;
}
++i, ++j;
}
k = m;
for(i = n; i; --i)
for(j = 1; j <= m + 1; ++j)
if(A[i][j] < -EPS || A[i][j] > EPS)
{
if(j == m + 1)
{
FILE *g = fopen("gauss.out", "w");
fprintf(g, "Imposibil\n");
fclose(g);
return 0;
}
sol[j] = A[i][m + 1];
for(k = j + 1; k <= m; ++k)
sol[j] -= A[i][k] * sol[k];
break;
}
FILE *g = fopen("gauss.out", "w");
for(i = 1; i <= m; ++i)
fprintf(g, "%.8lf ", sol[i]);
fprintf(g, "\n");
fclose(g);
return 0;
}