Pagini recente » Cod sursa (job #859582) | Rating Enescu Irina (irinaenescu2002) | Cod sursa (job #1461962) | Cod sursa (job #1764642) | Cod sursa (job #623531)
Cod sursa(job #623531)
#include<stdio.h>
float v[301][301],s[301],l;
int m,n,i,j,k;
bool fail,lol[301];
inline void test()
{
for(i=0;i<m;i++)
{
for(j=0;j<=n;j++)printf("%.7f ",v[i][j]);
printf("\n");
}
printf("\n\n");
}
inline void swap(int i)
{
int j,k;
j=i;
while(v[j][i]==0 && j<m)j++;
if(j==m) {fail=1;return;}
for(k=i;k<=n;k++) l=v[i][k],v[i][k]=v[j][k],v[j][k]=l;
}
int main()
{
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d%d",&m,&n);
fail=0;
if(m<n){printf("imposibil");return 0;}
for(i=0;i<m;i++)
for(j=0;j<=n;j++)
scanf("%f",&v[i][j]);
for(i=0;i<n;i++)
{
if(v[i][i]==0)swap(i);
if(fail){fail=0;lol[i]=1;continue;}
for(j=i+1;j<m;j++)
for(k=n;k>=i;k--)
v[j][k]=v[j][k] - v[i][k] * v[j][i] / v[i][i];
}
test();
for(i=0;i<n;i++)
for(j=n;j>=i;j--) v[i][j]/=v[i][i];
test();
for(i=n;i<m;i++) if(v[i][n]!=0){printf("imposibil");return 0;}
s[n-1]=v[n-1][n];
for(i=n-2;i>=0;i--)
{
if(lol[i])continue;
l=0;
for(j=n-1;j>i;j--)l+=v[i][j]*s[j];
s[i]=v[i][n]-l;
}
for(i=0;i<n;i++)printf("%.7f ",s[i]);
return 0;
}