Pagini recente » Cod sursa (job #1654952) | Cod sursa (job #1657352) | Cod sursa (job #1925542) | Cod sursa (job #2448433) | Cod sursa (job #1414741)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 302;
const double EPS = 1e-10;
double A[Nmax][Nmax];
double SOL[Nmax];
int N, M;
void gauss()
{
int i = 1, j = 1;
while (i <= N && j <= M)
{
int x = 0;
for (int k = i; k <= N && !x; ++k)
if (abs(A[k][j]) > EPS)
x = k;
if (!x)
{
j++;
continue;
}
swap(A[i], A[x]);
for (int k = j + 1; k <= M + 1; ++k)
A[i][k] /= A[i][j];
A[i][j] = 1;
for (int l = i + 1; l <= N; ++l)
{
for (int c = j + 1; c <= M + 1; ++c)
A[l][c] -= A[l][j] * A[i][c];
A[l][j] = 0;
}
i++; j++;
}
}
void solution()
{
ofstream out("gauss.out");
for (int i = N; i >= 1; i--)
for (int j = 1; j <= M + 1; ++j)
{
if (abs(A[i][j]) > EPS)
{
if (j == M + 1)
{
out << "Imposibil\n";
return;
}
SOL[j] = A[i][M + 1];
for (int k = j + 1; k <= M; ++k)
SOL[j] -= A[i][k] * SOL[k];
break;
}
}
for (int i = 1; i <= M; ++i)
{
out << fixed << setprecision(10);
out << SOL[i] << " ";
}
out << "\n";
}
int main()
{
ifstream in("gauss.in");
ios_base::sync_with_stdio(false);
in >> N >> M;
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= M + 1; ++j)
in >> A[i][j];
gauss();
solution();
return 0;
}