Pagini recente » Cod sursa (job #2788196) | Cod sursa (job #412514) | Cod sursa (job #2304857) | Cod sursa (job #3163643) | Cod sursa (job #743498)
Cod sursa(job #743498)
using namespace std;
#include<cstdio>
const double EPS = 0.0000001;
const int MAX_N = 307;
int N, M;
double A[MAX_N][MAX_N], X[MAX_N];
void printA() {
int i, j;
for(i = 1; i <= N; ++i)
{
for(j = 1; j <= M + 1; ++j)
printf("%lf ", A[i][j]);
printf("\n");
}
printf("\n\n");
}
int main() {
freopen("gauss.in", "r", stdin); freopen("gauss.out", "w", stdout);
scanf("%d%d", &N, &M);
int i, j, k, x;
bool ok;
double z;
for(i = 1; i <= N; ++i)
for(j = 1; j <= M + 1; ++j)
scanf("%lf", &A[i][j]);
i = 1; j = 1;
while(i <= N && j <= M) {
x = i;
while(x <= N && A[x][j] <= EPS && A[x][j] >= -EPS) ++x;
if(x == N + 1) {
++j;
continue;
}
if(x != i) {
for(k = j; k <= M + 1; ++k) {
double tmp = A[x][k];
A[x][k] = A[i][k];
A[i][k] = tmp;
}
}
for(x = i + 1; x <= N; ++x) {
z = A[x][j] / A[i][j];
for(k = j; k <= M + 1; ++k)
A[x][k] -= z * A[i][k];
}
++i; ++j;
// printA();
}
i = N; j = 1;
while( i > 0) {
for(j = 1; j <= M + 1; ++j)
if( j <= M && (A[i][j] < -EPS || A[i][j] > EPS)) {
X[j] = A[i][M+1];
for(k = j + 1; k <= M; ++k)
X[j] -= X[k] * A[i][k];
X[j] /= A[i][j];
break;
}
else if(j == M + 1) {
printf("Imposibil\n");
return 0;
}
--i;
}
for(i = 1; i <= M; ++i)
printf("%.10lf ", X[i]);
printf("\n");
return 0;
}