Pagini recente » Cod sursa (job #1179879) | Cod sursa (job #1179876) | Cod sursa (job #1213664) | Atasamentele paginii very.easy | Cod sursa (job #1582840)
#include <stdio.h>
#define MAXN 300
#define MAXM 300
#define EPS 0.0001
double a[MAXN][MAXM + 1], ca[MAXN][MAXM + 1], nr[MAXM];
int poz[MAXN];
inline int cmp(double x, double y){
if(x - y > EPS)
return 1;
if(y - x > EPS)
return -1;
return 0;
}
int main(){
FILE *in = fopen("gauss.in", "r");
int n, m, i, j, k, l;
double aux;
fscanf(in, "%d%d", &n, &m);
for(i = 0; i < n; i++){
for(j = 0; j <= m; j++){
fscanf(in, "%lf", &a[i][j]);
ca[i][j] = a[i][j];
}
}
fclose(in);
for(i = 0, j = 0; i < n && j < m; i++, j++){
poz[i] = j;
k = i;
while(k < n && cmp(a[k][j], 0) == 0){
k++;
}
if(k == n)
i--;
else{
for(l = 0; l <= m; l++){
aux = a[i][l]; a[i][l] = a[k][l]; a[k][l] = aux;
}
for(l = j + 1; l <= m; l++)
a[i][l] /= a[i][j];
a[i][j] = 1;
for(k = i + 1; k < n; k++){
for(l = j + 1; l <= m; l++){
a[k][l] -= a[i][l] * a[k][j];
}
a[k][j] = 0;
}
}
}
for(i = n - 1, j = 0; i >= 0; i--){
for(j = m - 1; j > poz[i]; j--)
a[i][m] -= nr[j] * a[i][j];
nr[j] = a[i][m] / a[i][j];
}
char bun = 1;
double sum;
for(i = 0; i < n && bun; i++){
sum = 0;
for(j = 0; j < m; j++){
sum += nr[j] * ca[i][j];
}
if(cmp(sum, ca[i][m]) != 0)
bun = 0;
}
FILE *out = fopen("gauss.out", "w");
if(!bun)
fprintf(out, "Imposibil");
else{
for(i = 0; i < m; i++)
fprintf(out, "%.8lf ", nr[i]);
}
fclose(out);
return 0;
}