Pagini recente » Cod sursa (job #971235) | Cod sursa (job #1738836) | Cod sursa (job #1062562) | Cod sursa (job #294259) | Cod sursa (job #623533)
Cod sursa(job #623533)
#include<fstream>
using namespace std;
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()
{
ifstream f("gauss.in");
ofstream g("gauss.out");
f>>m>>n;
fail=0;
if(m<n){printf("imposibil");return 0;}
for(i=0;i<m;i++)
for(j=0;j<=n;j++)
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++)g<<s[i]<<" ";
return 0;
}