Pagini recente » Cod sursa (job #316846) | Cod sursa (job #286082) | Cod sursa (job #1697170) | Cod sursa (job #1811831) | Cod sursa (job #1763974)
#include<stdio.h>
#define NMAX 301
#define EPS 0.0000001
int main(){
//FILE *fin=fopen("gauss.in","r");
//FILE *fout=fopen("gauss.out", "w");
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
int n, m, i, j;
double a[NMAX][NMAX], rez[NMAX];
scanf("%d %d", &n, &m);
for(i=1; i<=n; i++)
for(j=1; j<=m+1; j++)
scanf("%lf", &a[i][j]);
int k;
i=1; j=1;
while( i<=n && j<=m ){
//caut linia i care are coloana j diferita de 0
for(k=i; k<n; k++)
if( a[k][j]<-EPS || a[k][j]>EPS )
break;
//daca nu gasim linia - j variabila libera
if(k==n+1){
j++;
continue;
}
//skimb linia k cu linia i
double aux=0;
int p;
if( k!=i )
for( p=1; p<=m+1; p++) {
aux=a[i][p];
a[i][p]=a[k][p];
a[k][p]=aux;
}
//impart toata ecuatia de pe linia i la a[i][j]
for(p=j+1; p<=m+1; p++){
a[i][p]=a[i][p]/a[i][j];
}
a[i][j]=1;
int u;
//scad din ec i+1..n ecuatia i inmultia cu cosntata
for( u=i+1; u <= n; u++ ){
for(p = j+1; p <= m+1; p++ )
a[u][p] -=a[u][j]*a[i][p];
a[u][j]=0;
}
++i; ++j;
}
//calc necunoscute
int p;
for( i = n; i >= 1; i-- )
for( j = 1; j <= m+1; j++ )
if( a[i][j] > EPS || a[i][j] < -EPS){
if( j == m+1 ){
printf("Imposibil\n");
return 0;
}
rez[j]=a[i][m+1];
for ( p=j+1; p <= m; p++ )
rez[j]=rez[j]-(rez[p]*a[i][p]);
break;
}
for(i=1; i<=m; i++)
printf( "%.8f ", rez[i]);
printf( "\n" );
//system("pause");
return 0;
}