Pagini recente » Cod sursa (job #757451) | Cod sursa (job #376026) | Cod sursa (job #812266) | Cod sursa (job #2755854) | Cod sursa (job #1450263)
#include <stdio.h>
#define eps 1e-10
double A[305][305];
double X[305];
int main()
{
FILE* fin = fopen("gauss.in", "r");
FILE* fout= fopen("gauss.out", "w");
int N, M;
fscanf(fin, "%d%d", &N, &M);
int i, j, k, l, u;
for(i = 1 ; i <= N ; ++i)
for(j = 1 ; j <= M + 1 ; ++j)
fscanf(fin, "%lf", &A[i][j]);
double aux;
i = j = 1;
while(i <= N && j <= M)
{
for(k = i ; k <= N ; ++k)
if(A[k][j] < -eps || A[k][j] > eps)
break;
if(k == N + 1)
{
++j;
continue;
}
if(k != i)
for(l = 1 ; l <= M + 1 ; ++l)
{
aux = A[i][l];
A[i][l] = A[k][l];
A[k][l] = aux;
}
for(l = j + 1 ; l <= M + 1 ; ++l)
A[i][l] = A[i][l] / A[i][j];
A[i][j] = 1;
for(u = i + 1 ; u <= N ; ++u)
{
for(l = j + 1 ; l <= M + 1 ; ++l)
A[u][l] -= A[u][j] * A[i][l];
A[u][j] = 0;
}
++i;
++j;
}
for(i = N ; i > 0 ; --i)
for(j = 1 ; j <= M + 1 ; ++j)
if(A[i][j] < -eps || A[i][j] > eps)
{
if(j == M + 1)
{
fprintf(fout, "Imposibil\n");
return 0;
}
X[j] = A[i][M + 1];
for(k = j + 1 ; k <= M ; ++k)
X[j] -= X[k] * A[i][k];
break;
}
for(i = 1 ; i <= M ; ++i)
fprintf(fout, "%.8lf ", X[i]);
fprintf(fout, "\n");
return 0;
}