Pagini recente » Cod sursa (job #562968) | Cod sursa (job #432414) | Cod sursa (job #302552) | Cod sursa (job #443325) | Cod sursa (job #1689540)
#include<iostream>
#include<fstream>
#include<vector>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
double A[305][305];
double Sol[305];
double const tol = 1e-10;
int n, m;
void Read()
{
int i, j;
f>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m+1; j++)
f>>A[i][j];
}
void Solve()
{
int i, j, k, l;
double nr;
i = 1; j = 1;
while(i <= n && j <= m){
for(k=i; k<=n; k++)
if(abs(A[k][j]) > tol)
break;
if(k > n){
j++;
continue;
}
for(l=j; l<=m+1; l++)
swap(A[k][l], A[i][l]);
for(l=j+1; l<=m+1; l++)
A[i][l] /= A[i][j];
A[i][j] = 1;
for(k=i+1; k<=n; k++){
nr = A[k][j];
for(l=j; l<=m+1; l++)
A[k][l] -= nr * A[i][l];
}
i++; j++;
}
for(i=n; i>0; i--){
for(j=1; j<=m+1 && abs(A[i][j]) < tol; j++);
if(j == m+1 && A[i][j]){
g<<"Imposibil\n";
return;
}
Sol[j] = A[i][m+1];
for(k=j+1; k<=m; k++)
Sol[j] -= Sol[k] * A[i][k];
}
for(i=1; i<=n; i++)
g<<fixed<<setprecision(8)<<Sol[i]<<" ";
g<<"\n";
}
int main()
{
Read();
Solve();
return 0;
}