Pagini recente » Cod sursa (job #1714565) | Cod sursa (job #793873) | Cod sursa (job #2809499) | Cod sursa (job #493142) | Cod sursa (job #739477)
Cod sursa(job #739477)
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define p 0.00000001
double a[305][305],x[305],sw;
int n,m;
void cit(){
FILE *f;
int i,j;
f=fopen("gauss.in","r");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m+1;j++)
fscanf(f,"%lf",&a[i][j]);
fclose(f);
}
void afis(){
FILE *f;
f=fopen("gauss.out","w");
if(sw)
for(int i=1;i<=m;i++)
fprintf(f,"%0.8lf ",x[i]);
else
fprintf(f,"Imposibil\n");
fclose(f);
}
int main(){
cit();
int i,j,k,l;
double aux;
i=j=1;
sw=1;
while(i<=n&&j<=m){
k=i;
while(fabs(a[k][j])<p&&k<=n)
k++;
if(k==n+1){
j++;
continue;
}
if(k!=i)
for(l=1;l<=m+1;l++){
aux=a[i][l];
a[i][l]=a[k][l];
a[k][l]=aux;
}
for(l=j+1;l<=m+1;l++)
a[i][l]/=a[i][j];
a[i][j]=1;
for(k=i+1;k<=m;k++){
for(l=j+1;l<=m+1;l++)
a[k][l]-=a[k][j]*a[i][l];
a[k][j]=0;
}
i++;
j++;
}
for(i=n;i>=1;i--){
for(j=1;j<=m+1;j++)
if(fabs(a[i][j])>p)
break;
if(j==m+1){
sw=0;
afis();
return 0;
}
x[j]=a[i][m+1];
for(k=j+1;k<=m;k++)
x[j]-=x[k]*a[i][k];
}
afis();
return 0;
}