Pagini recente » Cod sursa (job #2192067) | Cod sursa (job #2896555) | Cod sursa (job #668015) | Cod sursa (job #2544097) | Cod sursa (job #2592133)
#include <bits/stdc++.h>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
int n,m,nr;
double ec[301][301],sol[301];
double rez[301];
void schimba(int i,int j)
{
for(int k=1;k<=m;k++)
swap(ec[i][k],ec[j][k]);
swap(sol[i],sol[j]);
}
void scade(int i,int j,double coef)
{
for(int k=1;k<=m;k++)
ec[i][k]-=ec[j][k]*coef;
sol[i]-=sol[j]*coef;
}
int main()
{
in>>n>>m;
nr=m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
in>>ec[i][j];
in>>sol[i];
}
if(m>n)
m=n;
int poz=m;
for(int i=1;i<=m;i++)
{
for(int j=i;j<=n;j++)
if( fabs(ec[j][poz])>0.0001 )
{
schimba(i,j);
break;
}
if( fabs(ec[i][poz])>0.0001 )
for(int j=i+1;j<=n;j++)
scade(j,i,ec[j][poz]/ec[i][poz]);
poz--;
}
for(int i=1;i<=n;i++)
{
bool ok=0;
for(int j=1;j<=n && !ok;j++)
if( fabs(ec[i][j])>0.0001 )
ok=1;
if(!ok && fabs(sol[i])>0.0001 )
{
out<<"Imposibil";
return 0;
}
}
for(int i=m;i>=1;i--)
{
double sum=0;
if( fabs(ec[i][m-i+1])>0.0001 )
{
for(int j=1;j<=m-i;j++)
sum+=ec[i][j]*rez[j];
rez[m-i+1]=(sol[i]-sum)/ec[i][m-i+1];
}
else if( fabs(sol[i]-sum)>0.0001 )
{
out<<"Imposibil";
return 0;
}
}
for(int i=1;i<=nr;i++)
out<<setprecision(8)<<fixed<<rez[i]<<' ';
return 0;
}