Pagini recente » Cod sursa (job #1448834) | Cod sursa (job #1310485) | Cod sursa (job #1176628) | Cod sursa (job #2034438) | Cod sursa (job #1467406)
#include <fstream>
#include <iomanip>
using namespace std;
ofstream fout("gauss.out");
ifstream fin("gauss.in");
const int NMAX = 305;
const double EPS = 0.0000001;
int N, M, ok;
double S[NMAX][NMAX];
double Sol[NMAX];
int main()
{
fin >> N >> M;
for(int i=1; i<=N; i++)
for(int j=1; j<=M+1; j++)
fin >> S[i][j];
int i = 1, j = 1, x = 0;
while(i <= N && j <= M)
{
ok = 0;
for(x=i; x<=N; x++)
if(S[x][j] > EPS || S[x][j] < -EPS) {
ok = 1;
break;
}
if(!ok) { j++; continue; }
if(x != i)
for(int k=1; k<=M+1; k++)
swap(S[x][k], S[i][k]);
for(int k=j+1; k<=M+1; k++)
S[i][k] /= S[i][j];
S[i][j] = 1;
for(int u=i+1; u<=N; u++) {
for(int k=j+1; k<=M+1; k++)
S[u][k] -= S[i][k] * S[u][j];
S[u][j] = 0;
}
i++; j++;
}
for(int i=N; i; i--)
for(int j=1; j<=M+1; j++)
if(S[i][j] > EPS || S[i][j] < -EPS)
{
if(j == M+1) {
fout << "Imposibil\n";
return 0;
}
Sol[j] = S[i][M+1];
for(int k=j+1; k<=M; k++)
Sol[j] -= Sol[k] * S[i][k];
break;
}
for(int i=1; i<=M; i++)
fout << fixed << setprecision(8) << Sol[i] << ' ';
return 0;
}