Pagini recente » Cod sursa (job #1198220) | Cod sursa (job #156638) | Cod sursa (job #1787340) | Cod sursa (job #2947043) | Cod sursa (job #872949)
Cod sursa(job #872949)
#include<stdio.h>
#include<math.h>
#define er 0.0000000000001
double a[305][305],x[305];
int n,m;
void cit(){
FILE *f;
f=fopen("gauss.in","r");
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m+1;j++)
fscanf(f,"%lf",&a[i][j]);
fclose(f);
}
void reduc(){
int i,j,k,l;
double b;
i=j=1;
while(i<=n&&j<=m){
for(k=i;k<=n;k++)
if(fabs(a[k][j])>=er)
break;
if(k==n+1)
j++;
else{
for(l=j;l<=m+1;l++){
b=a[i][l];
a[i][l]=a[k][l];
a[k][l]=b;
}
b=a[i][j];
for(l=j;l<=m+1;l++)
a[i][l]/=b;
a[i][j]=1;//asr
for(k=i+1;k<=n;k++){
b=a[k][j];
for(l=j;l<=m+1;l++)
a[k][l]-=b*a[i][l];
a[k][j]=0;//asdas
}
i++;
j++;
}
}
}
void sol(){
FILE *f;
int i,j,k;
f=fopen("gauss.out","w");
for(i=n;i>=1;i--){
for(j=1;j<=m;j++)
if(fabs(a[i][j])>er)
break;
if(j==m+1&&fabs(a[i][m+1])>er){
fprintf(f,"Imposibil\n");
fclose(f);
return ;
}
x[j]=a[i][m+1];
for(k=j+1;k<=m;k++)
x[j]-=x[k]*a[i][k];
}
for(i=1;i<=m;i++)
fprintf(f,"%0.8lf ",x[i]);
fclose(f);
}
int main(){
cit();
reduc();
sol();
for(int i=1;i<=n;i++){
for(int j=1;j<=m+1;j++)
printf("%0.12lf ",a[i][j]);
printf("\n");
}
return 0;
}