Pagini recente » Cod sursa (job #1254028) | Cod sursa (job #1753456) | Cod sursa (job #1631192) | Cod sursa (job #1026515) | Cod sursa (job #1165932)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
const int NMAX = 310;
const double EPS = 1e-12;
int N, M;
double A[NMAX][NMAX], Sol[NMAX];
void DoGauss()
{
int Ec = 1, Nec = 1;
while(Ec <= N && Nec <= M)
{
int i;
for(i = Ec; i <= N; ++ i)
if(fabs(A[i][Nec]) > EPS)
break;
if(i == N + 1)
{
Nec ++;
continue;
}
for(int k = 1; k <= M + 1; ++ k)
swap(A[i][k], A[Ec][k]);
for(int i = 1; i <= N; ++ i)
if(i != Ec)
{
double R = A[i][Nec] / A[Ec][Nec];
for(int j = Nec; j <= M + 1; ++ j)
A[i][j] -= A[Ec][j] * R;
}
Ec ++;
Nec ++;
}
for(int i = 1; i <= N; ++ i)
{
int j;
for(j = 1; j <= M + 1; ++ j)
if(fabs(A[i][j]) > EPS)
break;
if(j == M + 1)
{
printf("Imposibil\n");
exit(0);
}
Sol[i] = A[i][M + 1] / A[i][i];
}
for(int i = 1; i <= M; ++ i) printf("%.6lf ", Sol[i]);
}
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
scanf("%i %i", &N, &M);
for(int i = 1; i <= N; ++ i)
for(int j = 1; j <= M + 1; ++ j)
scanf("%lf", &A[i][j]);
DoGauss();
}