Pagini recente » Cod sursa (job #1568456) | Cod sursa (job #1454188) | Cod sursa (job #2296699) | Cod sursa (job #2550240) | Cod sursa (job #794181)
Cod sursa(job #794181)
#include <iostream>
#include <stdio.h>
using namespace std;
#define MAXN 310
#define EPS 0.0000001
int n, m, i, j, k;
double a[MAXN][MAXN], x[MAXN], aux;
int main()
{
FILE *fis = fopen ("gauss.in", "r");
FILE *fis2 = fopen ("gauss.out", "w");
fscanf(fis, "%d %d", &n, &m);
for ( i = 1; i <= n; i ++ )
for ( j = 1; j <= m+1; j ++ )
fscanf(fis, "%lf", &a[i][j]);
i = 1, j = 1;
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 ++ )
{
aux = a[i][l];
a[i][l] = a[k][l];
a[k][l] = aux;
}
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;
}
for ( i = n; i > 0; --i )
for ( j = 1; j <= m+1; j ++ )
if ( a[i][j] > EPS || a[i][j] < -EPS )
{
if ( j == m+1 )
{
fprintf(fis2, "Imposibil\n");
return 0;
}
x[j] = a[i][m+1];
for ( k = j+1; k <= m; ++k )
x[j] -= x[k] * a[i][k];
break;
}
for ( i = 1; i <= m; i ++ )
fprintf(fis2, "%.8lf ", x[i]);
fprintf(fis2, "\n");
fclose(fis);
fclose(fis2);
return 0;
}