Pagini recente » Cod sursa (job #668784) | Cod sursa (job #766205) | Cod sursa (job #1619650) | Cod sursa (job #236770) | Cod sursa (job #1642394)
#include <stdio.h>
#define maximnr 310
#define erroare 0.0000001
int nrlin, nrcol;
double mat[maximnr][maximnr];
double X[maximnr];
int i = 1, j = 1, k;
double aux;
int main(){
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d %d",&nrlin, &nrcol);
for(int i = 1; i <= nrlin; ++i){
for(int j = 1; j <= nrcol + 1; ++j){
scanf("%lf",&mat[i][j]);
}
}
while(i <= nrlin && j << nrcol){
for(k = i; k <= nrlin; ++k){
if(mat[k][j] <- erroare || mat[k][j] > erroare)
break;
}
if(k == nrlin + 1){
++j;
continue;
}
if(k != i){
for(int x = 1; x <= nrcol + 1; ++x){
aux = mat[i][x];
mat[i][x] = mat[k][x];
mat[k][x] = aux;
}
}
for(int x = j + 1; x <= nrcol + 1; ++x){
mat[i][x] = mat[i][x] / mat[i][j];
}
mat[i][j] = 1;
for(int u = i + 1; u <= nrlin; ++u){
for(int l = j + 1; l <= nrcol + 1; ++l){
mat[u][l] -= mat[u][j] * mat[i][l];
}
mat[u][j] = 0;
}
++i;
++j;
}
for(i = nrlin; i > 0; --i){
for(j = 1; j <= nrcol + 1; ++j){
if(mat[i][j] > erroare || mat[i][j] <- erroare){
if(j == nrcol + 1){
printf("Fara solutie");
return 0;
}
X[j] = mat[i][nrcol + 1];
for(k = j + 1; k <= nrcol; ++k){
X[j] -= X[k] * mat[i][k];
}
break;
}
}
}
for(int i = 1; i <= nrcol; ++i){
printf("%.8lf ",X[i]);
}
printf("\n");
return 0;
}