Pagini recente » Cod sursa (job #2318308) | Cod sursa (job #2162159) | Cod sursa (job #2207116) | Cod sursa (job #2972626) | Cod sursa (job #1904344)
#include <cstdio>
#define eps 1e-8
using namespace std;
int n, m;
double mat[301][301];
double rez[301];
inline bool ezero(const double& d)
{
return d >= -eps && d <= eps;
}
int main()
{
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++)
{
for(int j = 0; j <= m; j++)
{
scanf("%lf", &mat[i][j]);
}
}
int lc = 0, cc = 0;
while(lc < n)
{
if(ezero(mat[lc][cc]))
{
int i;
for(i = cc + 1; i < m; i++)
{
if(!ezero(mat[lc][i])) break;
}
if(i < m)
{
for(int j = 0; j <= m; j++)
{
mat[j][cc] += mat[j][i];
}
}
else if(!ezero(mat[lc][i]))
{
printf("Imposibil");
return 0;
}
else
{
lc++;
continue;
}
}
for(int i = cc + 1; i <= m; i++)
mat[lc][i] /= mat[lc][cc];
mat[lc][cc] = 1;
for(int i = lc + 1; i < n; i++)
{
if(ezero(mat[i][cc]))
continue;
for(int j = cc + 1; j <= m; j++)
{
mat[i][j] /= mat[i][cc];
mat[i][j] -= mat[lc][j];
}
mat[i][cc] = 0;
}
lc++; cc++;
}
if(cc != m)
{
printf("Imposibil");
return 0;
}
for(int i = n - 1; i >= 0; i--)
{
int j;
for(j = 0; j < m; j++)
{
if(!ezero(mat[i][j])) break;
}
if(j == m && ezero(mat[i][j])) continue;
else if(j == m)
{
printf("Imposibil");
return 0;
}
double st = 0;
for(int k = j + 1; k < m; k++)
{
st += rez[k] * mat[i][k];
}
rez[j] = mat[i][m] - st;
}
for(int i = 0; i < m; i++)
printf("%lf ", rez[i]);
return 0;
for(int i = 0; i < n; i++)
{
for(int j = 0; j <= m; j++)
{
printf("%lf ", mat[i][j]);
}
printf("\n");
}
return 0;
}