Pagini recente » Cod sursa (job #328267) | Cod sursa (job #1448012) | Cod sursa (job #2319679) | Cod sursa (job #580216) | Cod sursa (job #1719909)
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("gauss.in");
ofstream g("gauss.out");
#define EPS 0.0000001
int N, M;
double A[310][310];
double X[310];
int ok=1;
void Citire()
{
f>>N>>M;
for(int i = 1; i <= N; i++)
for(int j = 1; j <= M+1; j++)
f>>A[i][j];
}
void Calcul()
{
for(int i = N; i>0; i--)
for(int j = 1; j <= M+1; j++)
if(A[i][j]<-EPS || A[i][j]>EPS)
{
if(j == M+1)
{
ok=0;
return;
}
X[j] = A[i][M+1];
for(int k = j+1; k <= M; k++)
X[j] -= X[k] * A[i][k];
break;
}
}
void Gauss()
{
int i = 1, j = 1, k;
while(i <= N && j <= M)
{
for(k = i; k <= N; k++)
if(A[k][j]<-EPS || A[k][j]>EPS)
break;
if(k == N+1)
{
j++;
continue;
}
if(k != i)
for(int l = 1; l <= M+1; l++)
swap(A[i][l],A[k][l]);
for(int l = j+1; l <= M+1; l++)
A[i][l] = A[i][l] / A[i][j];
A[i][j] = 1;
for(int u = i+1; u <= N; u++)
{
for(int l = j+1; l <= M+1; l++)
A[u][l] -= A[u][j] * A[i][l];
A[u][j] = 0;
}
i++; j++;
}
Calcul();
}
void Afisare()
{
g<<fixed;
for(int i = 1; i <= M; ++i)
g<<setprecision(8)<<X[i]<<" ";
g<<'\n';
}
int main()
{
Citire();
Gauss();
if (ok==1) Afisare();
else g<<"Imposibil";
}