Pagini recente » Cod sursa (job #1913814) | Cod sursa (job #513819) | Cod sursa (job #1311897) | Cod sursa (job #641645) | Cod sursa (job #754808)
Cod sursa(job #754808)
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
#define eps 0.0000001
int n, m;
double A[310][310], X[310];
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
int i, j, k, l, u;
scanf("%i %i", &n, &m);
for(i = 1; i <= n; i++)
for(j = 1; j <= m + 1; j++)
scanf("%lf", &A[i][j]);
i = 1, j = 1, k;
double aux;
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 <= n; 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; i--)
{
for(j = 1; j <= m + 1; j++)
{
if(A[i][j] > eps || A[i][j] < -eps)
{
if(j == m + 1)
{
printf("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 <= n; i++) printf("%.8lf ", X[i]);
printf("\n");
return 0;
}