Pagini recente » Cod sursa (job #3124575) | Cod sursa (job #3182249) | Cod sursa (job #1650859) | Cod sursa (job #622293) | Cod sursa (job #2263685)
#include <bits/stdc++.h>
#define MaxN 305
#define EPS (1e-8)
std::ifstream InFile("gauss.in");
std::ofstream OutFile("gauss.out");
int N, M;
double Sol[MaxN], A[MaxN][MaxN];
double Val;
void Citire() {
InFile >> N >> M;
for (int i = 0; i < N; i++)
for (int j = 0; j <= M; j++)
InFile >> A[i][j];
}
void Rezolvare() {
bool Check;
int LC = 0, CC = 0;
while (LC < N && CC < M) {
if (abs(A[LC][CC]) < EPS) {
Check = 0;
for (int i=LC + 1; i<N; i++)
if (abs(A[i][CC]) >= EPS) {
for (int j = CC; j <= M; j++)
std::swap(A[i][j], A[LC][j]);
Check = 1;
break;
}
if (Check == 0) {
CC++;
continue;
}
}
for (int i = CC + 1; i <= M; i++)
A[LC][i] /= A[LC][CC];
A[LC][CC] = 1;
for (int i = LC + 1, j; i < N; i++) {
for (j = CC + 1; j <= M; j++)
A[i][j] -= A[i][CC] * A[LC][j];
A[i][CC] = 0;
} LC++; CC++;
}
Check = 1;
for(int i = N - 1, j; i >= 0; i--) {
for (j=0; j<=M && abs(A[i][j]) < EPS; ++j);
if(j==M + 1)
continue;
else if(j == M) {
Check = 0;
break;
}
else {
Val = 0;
for (int k = j + 1; k < M; k++)
Val += A[i][k] * Sol[k];
Sol[j] = A[i][M] - Val;
}
} OutFile << std::fixed << std::setprecision(10);
if(Check == 0) OutFile << "Imposibil\n";
else for(int i = 0; i < M; i++)
OutFile << Sol[i] << ' ';
}
int main()
{
Citire();
Rezolvare();
return 0;
}